'.NET'에 해당되는 글 25건
- 2011/11/27 ARR을 사용하여 간단 로드밸런싱 웹팜 구성하기 3 - 로드밸런싱을 위한 Health Test의 이해
- 2011/11/24 ARR(Application Request Rounting) 사용하여 간단 로드밸런싱 웹팜 구성하기 2 - ARR 설정하기
- 2011/10/31 ARR(Application Request Rounting) 사용하여 간단 로드밸런싱 웹팜 구성하기 1 - ARR 설치하기
- 2011/01/30 MSDN Magazine 2010/12월호
- 2009/05/01 Silverlight 서버전송메시지 보안방법
- 2009/03/14 ASP.Net MVC의 무료eBook 공개되었습니다.
- 2009/02/20 Visual Studio추가기능(Add-In) 만들기 - Part3
- 2009/02/14 Visual Studio추가기능(Add-In) 만들기 - Part2
- 2009/02/12 뮤텍스를 사용한 다중실행 방지(C#)
- 2009/02/11 Visual Studio추가기능(Add-In) 만들기 - Part1
로드밸런서는 Health Test 결과를 바탕으로 서버의 상태를 파악하고 있고 설정된 로드밸런싱 알고리즘에 따라서 정상적인 서버로 트래픽을 연결합니다.
따라서 로드밸런서가 하는 역할중 가장 기초가 되는것이 어떤 서버가 살아있고 어떤 서버가 죽었는지를 파악하는겁니다.
각 서버의 작동상태를 제대로 파악하지 못하면 멈춰있거나 문제가 있는 서버에 계속해서 트래픽을 보내주게 되고
그러면 정상적으로 서비스를 제공받지 못하는 클라이언트가 생기게 되죠.
ARR은 아래의 두가지 방법으로 웹서의 정상작동 유무를 파악합니다.
- URL Test
지정한 URL로 정해진 시간간격으로 리퀘스트를 보내서 정해진 응답코드를 정해진 시간내에 반환하는지를 체크해서 응답에 이상이 있을경우에는 서버가 Unhealthy로 변경됩니다.
Unhealthy로 체크된 서버는 다음 체크때 정상응답을 하면 Healthy로 되돌아갑니다.
- Live Traffic Test
모든 응답의 상태코드를 파악해서 정해진 허용범위를 벗어났을경우에 서버가 Unhealthy로 변경됩니다. 웹어플리케이션의 시스템에러가 연쇄적으로 발생하여 관리자의 확인이 필요한 경우등에 유용하게 사용됩니다.
Unhealthy로 체크된 서버는 자동적으로 Healthy로 되돌아 가지않습니다. Healthy로 되돌리려면 관리자가 수동으로 되돌리거나 다음 URL Test때 응답이 성공하면 Healthy로 되돌아감.
아래의 설정페이지의 각 설정값을 봐가면서 자세히 알아보도록 하겠습니다.
| 설정 | 설명 |
| URL | 테스트를 할 URL입니다. 이미지 파일이나 텍스트 파일 또는 정적인 HTML파일등 서버에 부담이 적은 요청을 테스트할 수 있는 URL을 지정합니다. |
| Interval (초) | 테스트할 시간간격입니다. |
| Time-Out (초) | 응답 timeout을 지정합니다. 10으로 지정하면 응답이 10초이상 지연되면 실패한것으로 판단합니다. |
| Acceptable status codes | 정상으로 인식할 응답코드입니다. |
| Response match | 응답에서 특정 문자열을 검색하여 성공실패 여부를 판단합니다. 예를들어 success를 지정하면 응답되는 내용에 success가 있어야만 성공한걸로 판단합니다. |
| Failure codes | 요청 실패로 인식할 응답코드입니다. |
| Maximum failures | 허용할 최대 요청실패 수입니다. |
| Failover period(초) | 설정한 시간동안 위의 Maximum failures에 설정한 실패가 발생한 경우 서버를 Unhealthy로 체크합니다. 0으로 설정하면 이 기능을 사용하지 않습니다. |
| Minimum severs | 정상가동중이어야 할 최소 서버수입니다. 3으로 설정했는데 정상인 서버가 2대라면 ARR서버에서 일부 유저의 요청을 거절합니다. (라고는 되어있는데 실제 확인해보기가 어렵더군요. 혹시 성공하신분이 계시면 알려주세요) |
Health Test를 위한 프로퍼티를 입력한 후에 Verify URL Test를 클릭하여 정상적으로 수행되는지를 확인해보고 Action Pane의 저장을 클릭하여 설정을 저장합니다.
'IIS' 카테고리의 다른 글
| ARR을 사용하여 간단 로드밸런싱 웹팜 구성하기 3 - 로드밸런싱을 위한 Health Test의 이해 (0) | 2011/11/27 |
|---|---|
| ARR(Application Request Rounting) 사용하여 간단 로드밸런싱 웹팜 구성하기 2 - ARR 설정하기 (0) | 2011/11/24 |
| ARR(Application Request Rounting) 사용하여 간단 로드밸런싱 웹팜 구성하기 1 - ARR 설치하기 (0) | 2011/10/31 |
| IIS 확장기능(부하분산) ARR - Application Request Routing 이란 (0) | 2011/10/24 |
ARR(Application Request Rounting) 사용하여 간단 로드밸런싱 웹팜 구성하기 2 - ARR 설정하기

정상적으로 작동되는지 확인하기 위하여 다음두가지를 사전에 실시해주세요.
- 웹서버1과 웹서버2에 IIS설치
- 부하분산이 제대로 이루어지는지 동작확인을 위해 각 서버의 Default Web Site의 iisstart.htm에 서버명을 추가합니다
1. AppPool의 유휴 시간 설정을 0으로 변경
ARR서버는 웹서버와 다르게 사용자 접속이 없어서 중지되어서는 안됩니다.
유휴시간 제한을 0으로 변경해서 항시 기동되는 상태로 전화해줍니다.
2. 서버팜 추가
제일 하단의 Server Farm에서 우측버튼 클릭후 Create Server Farm을 선택하고 서버팜의 이름을 정하고 다음을 누릅니다.
3. 서버팜에 서버추가
1) 웹서버IP주소를 넣습니다.
2) Advanced Settings에서 ARR서버가 웹서버와 통신할 포트랑 weight정보를 입력한후 Add 를 클릭합니다.
httpPort는 ARR서버와 웹서버가 http통신할때 사용하는 포트번호, httpsPorts는 https통신할 포트번호입니다.
weight는 로드밸런싱할때 어느 서버로 요청을 많이보낼지를 지정하는 가중치입니다.
3) 반복해서 웹서버2도 추가합니다.
4. 잘되나 확인해봅니다.
ARR서버의 주소(저는 192.168.0.90으로 설정했습니다.)로 IE를 열고 접속해봅니다.
접속하면 아래와 같이 서버명이 표시된 IIS초기화면이 표시됩니다.
근데 몇번 새로고침하면 아시겠지만 계속 동일한 서버만 표시됩니다. 정말 로드밸런싱 되고 있는것일까요?
수십번정도 새로고침해보세요. 어느샌가 Server2로 변경되어있을겁니다..^^;
왜 이런현상이 일어나는가 하면..다음회에 로드밸런싱 옵션에 대하여 다룰테니 그때 설명하도록 하겠습니다.
'IIS' 카테고리의 다른 글
| ARR을 사용하여 간단 로드밸런싱 웹팜 구성하기 3 - 로드밸런싱을 위한 Health Test의 이해 (0) | 2011/11/27 |
|---|---|
| ARR(Application Request Rounting) 사용하여 간단 로드밸런싱 웹팜 구성하기 2 - ARR 설정하기 (0) | 2011/11/24 |
| ARR(Application Request Rounting) 사용하여 간단 로드밸런싱 웹팜 구성하기 1 - ARR 설치하기 (0) | 2011/10/31 |
| IIS 확장기능(부하분산) ARR - Application Request Routing 이란 (0) | 2011/10/24 |
ARR(Application Request Rounting) 사용하여 간단 로드밸런싱 웹팜 구성하기 1 - ARR 설치하기

이 예제를 따라하기위해선 ARR서버, 웹서버1, 웹서버2의 서버가 필요합니다.
(2대만 가지고 ARR을 이용한 꼼수도 있지만 그건 나중에 따로 다루도록 하겠습니다.)
각 서버에는 IIS와 .Net프레임워크등 기본적인 웹사이트 구동을 위한 프로그램들도 설치되어야 하고요..
그리고 실질적인 ARR서버 설치를 위해서는 ARR서버에서만 설정을 해주면 됩니다.
불필요하게 ARR2.5를 웹서버에 인스톨 안하셔도 됩니다.
1. IIS.Net (http://www.iis.net/download/ApplicationRequestRouting)사이트에서 Install버튼을 누릅니다.
2. 다음 화면에서 웹플랫폼 다운로드를 눌러 웹플랫폼 설치관리자를 설치합니다.
IIS의 확장기능은 독립설치파일이 아니라 전부 웹플랫폼을 통해서 설치를 하게되더군요.
관련제품들을 간단하게 설치할수 있도록 일부러 마련해놓은거 같습니다.
3. 설치정보가 표시되면 좌측하단의 설치할 항목을 눌러보시기 바랍니다.
ARR은 단독으로 설치되는게 아니라 몇개의 확장기능이 같이 설치됩니다.
4. 다음목록은 같이 설치되는 확장기능들인데 눈여겨 볼것이 Web Farm Framework, External Cache, URL 재작성2.0 입니다.
Web Farm Framework는 다중웹서버를 구현하여 부하분산을 하고 있는 웹사이트 환경을 쉽게 관리할수 있게 해주는 기능이고,
External Cache는 ARR서버의 캐쉬를 메모리가 아닌 하드디스크에 저장해주는 역할과 캐쉬된 리소스를 관리하는 역할을 해줍니다.(IIS는 원래 메모리캐쉬밖에 지원을 안해서 그렇습니다.)
URL재작성(URL Rewrite)은 요청한 URL과 리퀘스트파라메터를 기초로 정해진 규칙으로 URL변환을 하여 각 서버로 연결해줍니다.
그리고 핵심이 되는 ARR은 설치되는 3개의 확장기능을 통합하여 대규모 부하분산 시스템을 구축할 수 있도록 해주는 거죠.
5. 다 보셨으면 설치를 눌러 진행합니다.
6. 설치완료화면이 나오면 설치가 완료된 것입니다. 설치후에는 IIS재기동 하시면 됩니다.
참고자료
Web Farm Framework - http://www.iis.net/download/webfarmframework
URL 재작성 - http://www.iis.net/download/URLRewrite
External Cache - http://learn.iis.net/page.aspx/575/configure-and-enable-disk-cache-in-application-request-routing/
'IIS' 카테고리의 다른 글
| ARR을 사용하여 간단 로드밸런싱 웹팜 구성하기 3 - 로드밸런싱을 위한 Health Test의 이해 (0) | 2011/11/27 |
|---|---|
| ARR(Application Request Rounting) 사용하여 간단 로드밸런싱 웹팜 구성하기 2 - ARR 설정하기 (0) | 2011/11/24 |
| ARR(Application Request Rounting) 사용하여 간단 로드밸런싱 웹팜 구성하기 1 - ARR 설치하기 (0) | 2011/10/31 |
| IIS 확장기능(부하분산) ARR - Application Request Routing 이란 (0) | 2011/10/24 |
언제나 다 중요한 내용들이지만 시대를 뒤쳐지지 않기위해..
꼭 봐둘만한 기사
'.Net' 카테고리의 다른 글
| MSDN Magazine 2010/12월호 (0) | 2011/01/30 |
|---|---|
| 뮤텍스를 사용한 다중실행 방지(C#) (0) | 2009/02/12 |
| 六曜を取得する (0) | 2008/10/25 |
| 한방에 예외로그를 처리하기. (0) | 2008/10/22 |
| ClickOnce로 배포된 어플리케이션 버젼 취득. ClickOnce配布アプリのバージョン取得 (0) | 2008/09/30 |
| OTP솔루션 구축방법 (0) | 2008/05/20 |
실버라이트를 사용한 SSL통신 비스므리한 아이디어가 생각나서 적어봅니다..
네고시에이션
1. 세션 생성시에 해당세션에 해당되는 비대칭키를 서버에서 생성해서 세션에 서버의 개인키를 보존
2. 공개키를 클라이언트에 전송(HTML에 집어넣든..Silverlight상에서 수신하든..)
3. 클라이언트는 비대칭키를 생성해서 자신의 공개키를 서버에 전송(서버의 공개키로 암호화해서)
4. 서버는 세션에 클라이언트의 공개키를 보존
5. 클라이언트는 자신의 개인키를 보존. 보존시에는 페이지이동을 고려해야함..
(문제는 클라이언트자신의 개인키를 어디에 보존하느냐??? IsolatedStorage가 사용가능하려나)
암호화 전송시(개인정보,패스워드등)
5. 클라이언트가 서버에 데이터 전송시에 자신의 개인키+서버의 공개키로 암호화해서 전송
6. 서버는 클라이언트에게 서버의 개인키+클라이언트의 공개키로 암호화해서 데이터전송
일반적인 비대칭암호화통신의 방법이지만 먼가뿌듯한 이느낌..-.-;;;
물론 실버라이트랑 서버간의 통신이 대부분 WCF나 Webservice로 이루어지니까
일괄적인 보안설정을 하면되지만.. 보안설정하는것도 꽤 많은 지식과 노력을 요하게되니..
위 기능을 구현한 간단한 컴퍼넌트가 있으면 꽤 좋을듯..
어쨋든 세션당 키가 생성되니 일반적인 웹사이트에서 사용하기에는 충분한 보안레벨인듯..
게다가 javascript연동기능도 만들면 궂이 silverlight로 UI를 만들지 않아도 암호화 가능하다는 사실..
혹시 공개된거 있을려나???
'ASP.Net' 카테고리의 다른 글
| Silverlight 서버전송메시지 보안방법 (0) | 2009/05/01 |
|---|---|
| IE8의 WebSlices기능을 웹사이트에 추가하기 (1) | 2009/03/19 |
| ASP.Net MVC의 무료eBook 공개되었습니다. (0) | 2009/03/14 |
| WebService의 WSDL및 안내페이지 없애기 (0) | 2008/12/09 |
| BeginRequest,PreSendRequestHeaders를 사용하여 쿠키암호화 (0) | 2008/10/30 |
| ASP.Net와 Java Struts 비교 (0) | 2007/03/19 |
MS의 .Net플랫폼 부사장인 Scott Guthrie씨가 곧 발매예정인 Professional ASP.Net MVC 1.0의 제1장을 집필했는데..
무료로 써주는 대신에 자신의 집필분에 한해 무료공개한다는 전제조건을 달았다고 하네요..
그리하여 제1장이 무료공개 되었는데요..
1장치고는 내용이 충실해서 개발경험있고 MVC에 대한 개념이 잡힌사람한테는
ASP.Net MVC를 처음 접할때에는 굉장히 유용할거 같습니다.
Scott에게 감사드리며 잘읽겠습니다..
근데 누가 번역좀 ??? -.-
원본
http://weblogs.asp.net/scottgu/archive/2009/03/10/free-asp-net-mvc-ebook-tutorial.aspx
PDF다운로드
http://aspnetmvcbook.s3.amazonaws.com/aspnetmvc-nerdinner_v1.pdf
Amazon책정보
http://www.amazon.com/gp/product/0470384611?ie=UTF8&tag=scoblo04-20&linkCode=xm2&camp=1789&creativeASIN=0470384611
'ASP.Net' 카테고리의 다른 글
| Silverlight 서버전송메시지 보안방법 (0) | 2009/05/01 |
|---|---|
| IE8의 WebSlices기능을 웹사이트에 추가하기 (1) | 2009/03/19 |
| ASP.Net MVC의 무료eBook 공개되었습니다. (0) | 2009/03/14 |
| WebService의 WSDL및 안내페이지 없애기 (0) | 2008/12/09 |
| BeginRequest,PreSendRequestHeaders를 사용하여 쿠키암호화 (0) | 2008/10/30 |
| ASP.Net와 Java Struts 비교 (0) | 2007/03/19 |
의 부연 설명으로 IDTExtensibility2, DTCommandTarget 인터페이스의 간략한 설명으로 추가기능 만들기 내용을 끝내겠습니다.
IDTExtensibility2
| 메서드 | 설명 |
| OnConnection | Visual Studio가 추가기능을 로드할때 불려짐. 커맨드를 추가하거나 초기설정을 할때 사용함. |
| OnDisConnection | Visual Studio가 추가기능을 언로드할때 불려짐. 추가기능에서 추가한 커맨드등을 삭제할때 사용함. |
| OnAddInsUpdate | Visual Studio가 추가기능을 로드할때와 추가기능설정이 변경되었을때 불려짐. |
| OnStartupComplete | Visual Studio가 추가기능의 로딩을 끝냈을때 불려짐. |
| OnBeginShutdown | Visual Studio가 종료될때 불려짐. |
DTCommandTarget
| 메서드 | 설명 |
| Exec | 유저가 커맨드를 실행했을때 불려짐. 커맨드의 실제 실행로직에 사용하면 됨. |
| QueryStatus | Visual Studio의 상태가 변경되었을때 불려짐. 상황에 따라서 커맨드의 활성비활성화를 결정지을때 사용하면 됨. |
마지막으로...추가기능을 배포에 관한 내용입니다.
기본적인 배포방법은 Add-In을 VS에서 사용하려면 애드인 정의XML을
My Documents\Visual Studio 2005\Addins 또는 My Documents\Visual Studio 2008\Addins에 복사해 넣고
(모든 PC사용자에게 사용가능하게 하려면 Documents and Settings\All Users\My Documents 에 넣으시면 됩니다.)
정의XML에 기입된 DLL의 장소(파일, url, GAC)에 DLL을 집어넣는것으로 배포는 끝입니다.
정말 간단한 방법에 MS에 감사드립니다..-.-
정의 XML과 배포에 대한 보다 자세한 내용은 아래의 링크로 대신하겠습니다.
http://msdn.microsoft.com/ko-kr/library/19dax6cz(VS.80).aspx -> 추가기능 등록
http://msdn.microsoft.com/ko-kr/library/keet1583(VS.80).aspx -> 기타 참고 제어 방법
'VS2008,2005,2003' 카테고리의 다른 글
| Visual Studio추가기능(Add-In) 만들기 - Part3 (0) | 2009/02/20 |
|---|---|
| Visual Studio추가기능(Add-In) 만들기 - Part2 (0) | 2009/02/14 |
| Visual Studio추가기능(Add-In) 만들기 - Part1 (0) | 2009/02/11 |
| 각종 파일들의 초기템플릿을 변경하기 (0) | 2008/09/26 |
| VS2008 고마운 신기능 (0) | 2007/12/30 |
| 내가 만든 DLL 참조추가할때 리스트에 표시하기 (2) | 2007/05/11 |
에 이어서 VS에 간단한 추가기능을 추가해보도록 하겠습니다.
제일중요한 IDTExtensibility2와 IDTCommandTarget의 인터페이스에 대한 정리는 제일 나중에 정리하도록 하고..
일단 툴바메뉴에 버튼을 추가해보죠.
IDTExtensibility2의 인터페이스메서드중 하나인 OnConnection메서드에 아래와같은 코드를 입력해주시고
SetToolBar()라는 함수도 추가해주세요. SetToolBar는 실제 버튼을 등록하는 코드를 서브루틴으로 빼둔겁니다.
{
_applicationObject = (DTE2)application;
_addInInstance = (AddIn)addInInst;
switch (connectMode)
{
case ext_ConnectMode.ext_cm_Startup:
SetToolBar();
break;
case ext_ConnectMode.ext_cm_AfterStartup:
SetToolBar();
break;
case ext_ConnectMode.ext_cm_CommandLine:
break;
case ext_ConnectMode.ext_cm_External:
break;
case ext_ConnectMode.ext_cm_Solution:
break;
case ext_ConnectMode.ext_cm_UISetup:
break;
default:
break;
}
}
/// <summary>
/// 표준Toolbar에 버튼을 등록
/// </summary>
private void SetToolBar()
{
CommandBar stdCmdBar;
CommandBarButton cmdBarBtn;
object[] contextGUIDS = new object[] { };
//커맨드가 등록되어 있지않다면 새로 등록
if (ToolbarCommand == null)
{
ToolbarCommand = _applicationObject.Commands.AddNamedCommand(_addInInstance,
"ANewComment", "코멘트추가", "코멘트를 추가해줍니다.", true, 59, ref contextGUIDS,
(int)vsCommandStatus.vsCommandStatusSupported
| (int)vsCommandStatus.vsCommandStatusEnabled);
}
//표준툴바의 객체를 취득
stdCmdBar =
(Microsoft.VisualStudio.CommandBars.CommandBar)((Microsoft.VisualStudio.CommandBars.CommandBars)_applicationObject.CommandBars)["Standard"];
//표준툴바에 버튼을 추가
stdCmdBarCtl = (Microsoft.VisualStudio.CommandBars.CommandBarControl)ToolbarCommand.AddControl(stdCmdBar, stdCmdBar.Controls.Count + 1);
//버튼에 캡션설정
stdCmdBarCtl.Caption = "이거 누르면 코멘트가 추가됩니다.";
//버튼을 아이콘으로 설정
cmdBarBtn = (CommandBarButton)stdCmdBarCtl;
cmdBarBtn.Style = MsoButtonStyle.msoButtonIcon;
}
일단 이것만 하고 실행(F5)를 누르고 디버깅해주시면 아래 그림과 같이 툴바 제일끝에 스마일버튼이 추가된걸 보실수가 있습니다.
근데!!버튼을 누를수가 없네요.
IDTCommandTarget의 인터페이스메서드중 하나인 QueryStatus메서드에 아래와같은 코드를 입력해주세요.
빨간 부분은 프로젝트를 만들때 사용했던 추가기능의 이름을 넣어주세요.
public void QueryStatus(string commandName, vsCommandStatusTextWanted neededText, ref vsCommandStatus status, ref object commandText)
{
if(neededText == vsCommandStatusTextWanted.vsCommandStatusTextWantedNone)
{
//커맨드명과 현재 활성화된 창의 문서가 Document일 경우에만 사용가능하다는 신호를 보냄
if (commandName == "MyTestAddin1.Connect.ANewComment" && _applicationObject.ActiveWindow.Type == vsWindowType.vsWindowTypeDocument)
{
status = (vsCommandStatus) vsCommandStatus.vsCommandStatusEnabled | vsCommandStatus.vsCommandStatusSupported;
return;
}
}
}
QueryStatus메서드는 VS가 자신의 상태가 변하면 각 커맨드들에 사용가능한 상태인지 요청하게 됩니다.
QueryStatus메서드에서 현재 VS의 상황을 파악하여 사용가능여부를 반환합니다.
예를들어 위의 코드에서는 '커맨드명과 현재 활성화된 창의 문서가 Document일 경우에만 사용가능하다는 신호를 보냄'이 상황이 됩니다.
제가 현재 열려진 창의 문서가 Document일 경우에만 사용가능하다는 신호를 보냄이란 조건을 설정한 이유는 스타트페이지가 열려진 상태에서 버튼이 눌러지게 되면 코멘트를 넣을곳이 없기때문에 에러를 발생시키기 때문이죠..
물론 코멘트를 넣어줄때 체크를 하면되지만 유저인터페이스를 고려해서 쓸수 없는 상황에는 아예 안눌려지게 하기위함입니다..
(위의 조건도 완벽한 상태가 아닙니다.실은 vsWindowTypeDocument라는건 파일의 종류와 상관없이 편집가능한 문서-소스코드,HTML,CSS,XML등 모든 문서-를 의미합니다.)
자 이제 마지막으로 버튼을 눌렀을때 문서에 코멘트를 넣는 코드를 추가해보겠습니다.
IDTCommandTarget의 인터페이스메서드중 하나인 Exec메서드에 아래와같은 코드를 입력해주세요.
{
handled = false;
if(executeOption == vsCommandExecOption.vsCommandExecOptionDoDefault)
{
switch (commandName) //스위치를 사용하여 불려진 커맨드를 체크.(혹시 하나의 추가기능에 버튼이 여러개 있을수도 있으니까 스위치를 사용합니다.)
{
case "MyTestAddin1.Connect.ANewComment":
//현재 열려진 창이 문서인지 재확인을 하고
if (_applicationObject.ActiveWindow.Type == vsWindowType.vsWindowTypeDocument)
{
//열려진 문서의 인스턴스를 취득해서
TextDocument textDoc = (TextDocument) _applicationObject.ActiveWindow.Document.Object("TextDocument");
textDoc.StartPoint.CreateEditPoint(); //커서위치를 가져오고
//커맨드를 삽입하고
textDoc.Selection.Insert(string.Format("//{0}에 입력되었습니다.",DateTime.Now.ToString()), 0);
//보기좋게 하기위해 개행문자를 넣어줌...
textDoc.Selection.EndOfLine(true);
textDoc.Selection.NewLine(1);
handled = true;
}
return;
default:
break;
}
}
}
자!!! 이제 다 만들어졌습니다.
다시 실행버튼을 누르시고 대충 아무 cs파일을 여시고.. 파일을 여시면 버튼이 활성화되는걸 보실수 있을겁니다.
그리고 버튼을 누르시면 아래처럼 자동으로 코멘트가 들어가 있을겁니다.
일단 오늘 시간이 좀 늦었으니 담번에 IDTExtensibility2와 IDTCommandTarget에 대해서랑 어떻게 추가기능을 배포할것인지를 정리하도록 하겠습니다..-.-;;
내용 추가
아래 소스코드도 IDTExtensibility2의 OnDisconnection메서드에 집어넣어주세요. 아래의 소스코드는 추가기능이 언로드될때 커맨드와 버튼을 삭제해줄때 사용합니다.이걸 집어넣지 않으면 추가기능을 활성화, 비활성화할때 에러를 발생시킬수 있거든요..^^;
깜박하고 빼먹었습니다..
public void OnDisconnection(ext_DisconnectMode disconnectMode, ref Array custom)
{
//추가기능이 언로드될 등록한 버튼과 커맨드를 삭제
try
{
if (disconnectMode == ext_DisconnectMode.ext_dm_UserClosed)
{
if (stdCmdBarCtl != null)
{
stdCmdBarCtl.Delete(null);
stdCmdBarCtl = null;
ToolbarCommand.Delete();
ToolbarCommand = null;
}
if (MenuToolCommand != null)
{
MenuToolCommand.Delete();
MenuToolCommand = null;
}
}
}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.ToString());
}
}
'VS2008,2005,2003' 카테고리의 다른 글
| Visual Studio추가기능(Add-In) 만들기 - Part3 (0) | 2009/02/20 |
|---|---|
| Visual Studio추가기능(Add-In) 만들기 - Part2 (0) | 2009/02/14 |
| Visual Studio추가기능(Add-In) 만들기 - Part1 (0) | 2009/02/11 |
| 각종 파일들의 초기템플릿을 변경하기 (0) | 2008/09/26 |
| VS2008 고마운 신기능 (0) | 2007/12/30 |
| 내가 만든 DLL 참조추가할때 리스트에 표시하기 (2) | 2007/05/11 |
많이 쓰이는건데..
WinApp의 다중실행을 방지하는 샘플입니다.
Program.cs를 아래와 같이 변경해주세요.
static class Program
{
// 어플리케이션의 이름
private static string strAppConstName = "적당한 어플리케이션의 이름";
// 다중기동을 방지하는 뮤텍스인스턴스
private static Mutex mutexObject;
[STAThread]
static void Main()
{
// Windows 2000(NT 5.0)이후만 글로벌 뮤텍스가 사용가능
OperatingSystem os = Environment.OSVersion;
if ((os.Platform == PlatformID.Win32NT) && (os.Version.Major >= 5))
{
strAppConstName = @"Global\" + strAppConstName;
}
try
{
// 뮤텍스를 생성
mutexObject = new Mutex(false, strAppConstName);
}
catch (ApplicationException e)
{
// 글로벌 뮤텍스에 의한 다중실행 방지
MessageBox.Show("이미 실행되고 있습니다.", "다중실행방지");
return;
}
// 뮤텍스를 취득
if (mutexObject.WaitOne(3000, false))
{
//실행
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new frm_SignIn());
//프로그램사용이 끝났으니 뮤텍스를 해방
mutexObject.ReleaseMutex();
}
else
{
//이미 실행중이니 경고 메시지
MessageBox.Show("이미 실행되고 있습니다.", "다중실행방지");
}
// 뮤텍스를 파기하고 완전종료
mutexObject.Close();
}
}
'.Net' 카테고리의 다른 글
| MSDN Magazine 2010/12월호 (0) | 2011/01/30 |
|---|---|
| 뮤텍스를 사용한 다중실행 방지(C#) (0) | 2009/02/12 |
| 六曜を取得する (0) | 2008/10/25 |
| 한방에 예외로그를 처리하기. (0) | 2008/10/22 |
| ClickOnce로 배포된 어플리케이션 버젼 취득. ClickOnce配布アプリのバージョン取得 (0) | 2008/09/30 |
| OTP솔루션 구축방법 (0) | 2008/05/20 |
Visual Studio에는 3가지 방법으로 개발환경을 커스터마이징할수 있습니다.
매크로
매크로는 흔히 이용하는 오피스의 매크로와 동일하다고 보시면 됩니다.
사용자의 액션을 레코딩하여 반복작업을 간단하게 해줄수도 있고 컴파일이 필요없기 때문에 쉽게 편집할수도 있습니다.
다만 Visual Basic으로만 저장이 가능하고 소스코드가 그대로 저장되어서 배포할때도 소스코드가 배포되니
통합된 프로젝트에서는 관리하기가 불편하죠.
Add-In
하나의 어플리케이션형태로 개발되고 배포또한 인스톨러형식으로 배포가능하고 매크로보다 강력합니다.
매크로는 사용자의 명령을 소스코드가 대신해주는 기능뿐이지만 Add-In은 하나의 어플리케이션처럼
VS랑 상호작용하니 가능한 작업도 많아집니다.
Visual Studio SDK
이건 저도 사용해본적이 없어서 많은 설명을 드릴수는 없지만 Visual Studio SDK를 사용하면
VS를 근본부터 제어할수 있습니다. DevParter라든지 각종 서드파티의 개발지원툴들은 이것을 이용하여 개발되었다고
보시면 됩니다.WF나 WCF의 디자이너또한 마찬가지이고요..
3파트 정도로 나뉘어서 간단하게 툴바에 버튼을 하나 추가하여 버튼을 누르면 소스코드에 코멘트를
자동으로 입력해주는 기능을 만들어보도록 하겠습니다.
일단 오늘은 VS가 제공하는 템플릿을 사용하여 기본틀만 만들어보죠.
1. 새 프로젝트를 클릭하셔서 "기타 프로젝트형식" -> "확장성" -> "Visual Studio 추가기능" 순으로 클릭해주세요.
그리고 적당한 이름을 넣으시고 "확인을 눌러주세요.
참고로 옆에 보이는 "공유추가기능"이란건 오피스등에서 사용할수 있는 추가기능을 말합니다.
2. 그럼 위저드가 실행되어 언어를 선택하는 화면이 나옵니다.여기서는 C#을 선택합니다.
3. 그후에는 어떤 형식으로 추가기능을 사용할건지가 나오는데요. Macros를 제외한걸 선택합니다.
(실은 Macros를 선택한것과 안한것이 머가 틀린지는 저도 모르겠습니다...-.-..다만 추가기능의 정의XML에 호스팅되는 환경으로 매크로가 추가될뿐...)
4.그리고 이름과 설명을 대충입력해주시고요...
5. 아래와 같이 체크복스를 체크합니다.
가볍게 설명을 하자면 "도구"메뉴항목을 만듭니다..라는 내용은 VS상단메뉴의 "도구"에 지금 만드는 추가기능의
기본명령을 추가해주는 소스코드를 자동으로 만들어줍니다.
다음으로 호스트 응용프로그램이 시작될때 로드합니다.라는 내용은 추가기능의 정의XML에 옵션설정을 해주어서
별도의 유저액션없이 추가기능을 로드해줍니다.
마지막의 모달UI를 표시하지 않으며...라는 내용은 MSDN에는 추가 기능에 모달 UI(사용자 인터페이스)를 사용하지 않도록 하여 명령줄 빌드에서 안전하게 사용할 수 있도록 할지 여부라고 나오는데 당췌 먼말인지 모르겠습니다..-.-
6. 상단 메뉴의 "도움말" -> "Visual Studio 정보"라는 메뉴를 클릭했을때 나오는 일반적은 정보화면에 추가기능의 정보를 표시할지를 선택합니다. 대충 입력하시고 다음을 눌러주세요..
7. 그럼 프로젝트가 작성되어지고 다음의 소스코드들이 들어가 있을겁니다.
이걸로 템플릿을 사용하여 아무것도 없는 소스코드까지만 만들었습니다.
하지만 다음 내용을 위해 하나 해둬야 할게 있습니다.
현재 Connect는 IDTExtensibility2라는 인터페이스만을 구현하고 있는데 이건 추가기능으로써 필요한 인터페이스입니다.
저희는 도구모음을 버튼을 추가해야하니 IDTCommandTarget라는 인터페이스도 구현해야합니다.
IDTCommandTarget라는 텍스트를 추가하시고 아래그림과 같이 메서드스터브를 자동으로 만들어 주세요.
IDTExtensibility2과 IDTCommandTarget에 대한 설명을 다음 내용에서 설명하도록 하겠습니다.
'VS2008,2005,2003' 카테고리의 다른 글
| Visual Studio추가기능(Add-In) 만들기 - Part3 (0) | 2009/02/20 |
|---|---|
| Visual Studio추가기능(Add-In) 만들기 - Part2 (0) | 2009/02/14 |
| Visual Studio추가기능(Add-In) 만들기 - Part1 (0) | 2009/02/11 |
| 각종 파일들의 초기템플릿을 변경하기 (0) | 2008/09/26 |
| VS2008 고마운 신기능 (0) | 2007/12/30 |
| 내가 만든 DLL 참조추가할때 리스트에 표시하기 (2) | 2007/05/11 |
![]() |
![]() |
|
![]() |
![]() |
![]() |

Prev





