http://msdn.microsoft.com/en-us/library/bb978523.aspx
http://msdn.microsoft.com/en-us/library/bb735856.aspx
WCF의 COM+ 통합서비스
쉽게 얘기해서 COM+의 서비스를 종전의 DCOM이나 RDS처럼 WCF 여러 채널(바인딩)을 통해서 서비스 하는 방법이다
Binding |
Interoperability |
Transactions |
Encoding |
BasicHttpBinding |
Basic Profile 1.1 |
(None) |
Text, (MTOM) |
WSHttpBinding |
WS |
(None), Yes |
Text, (MTOM) |
WSDualHttpBinding |
WS |
(None), Yes |
Text, (MTOM) |
WSFederationHttpBinding |
WS-Federation |
(None), Yes |
Text, (MTOM) |
NetTcpBinding |
.NET |
(None), Yes |
Binary |
NetNamedPipeBinding |
.NET |
(None), Yes |
Binary |
NetMsmqBinding |
.NET |
(None), Yes |
|
NetPeerTcpBinding |
Peer |
(None) |
|
MsmqIntegrationBinding |
MSMQ |
(None), Yes |
|
여기서 WSHttpBinding과 BasicHttpBinding 과 같은 경우는 IIS를 통해서 지원을 하고,
NetTCPBinding 과 같은 경우는 COM+를 통해서 호스팅이 가능 하도록 설계되어 있다
물론 WAS(IIS 7.0)의 경우 모두 호스팅이 가능할 것으로..
(COM+ 통합의 경우 셀프 호스팅은 아직 안해봐서 모르겠다..)
WCF의 COM+ 통합서비스를 하려면 다음과 같은 도구가 필요하다
- .NET Framework 3.0 (or 3.5 ) (3.5를 설치하면 3.0, 2.0 등이 모두 설치된다.) - 3.5 권장..
- SvcConfigEditor.exe (Service Configuration Editor) 혹은 ComSvcConfig.exe
ComSvcConfig.exe는 .NET Framework 3.0와 함께 제공되며 커맨트 툴로 COM+의 WCF의 구성을 돕는다.
허나 .NET SDK로 제공되는 SvcConfigEditor.exe를 이용하면 Visual 한 환경으로 WCF 구성파일 편집, 생성및 COM+을 쉽게 구성할수 있다.
* ComSvcConfig.exe : http://msdn.microsoft.com/ko-kr/library/ms732009.aspx
구성 방법
1. 우선 만들어진 컴포넌트(VC++ ATL 간단하게 만들었다)를 COM+에 패키지를 생성하여 추가한다.
2. SvcConfigEditor.exe를 실행하여 "파일->통합->COM+응용프로그램" 메뉴를 선택
- COM+의 패키지의 컴포넌트 인터페이스를 선택
- 컴포넌트의 메서드 선택
- COM+ 호스팅 선택
- TCP를 선택
- 서비스 주소 세팅 (ex: net.tcp://localhost:9000/Simple)
- 완료
3. 2번과 같이 세팅이 완료된 경우 COM+의 해당 패키지의 등록정보-활성화 탭의 "응용 프로그램 루트 디렉토리"란에 WCF 설정파일이 생성된 디렉토리 경로가 세팅된다.
ex: C:\Program Files\ComPlus Applications\{593add39-f66f-442a-a901-01379dbac4eb}\
4. 그리고 netstat 로 확인을 해보면 hosting 이 되어 있는걸 확인할 수 있다.
TCP 0.0.0.0:9000 0.0.0.0:0 LISTENING
위의 방법 이외에 웹호스팅으로도 선택하여 IIS를 통하여 서비스 하는것도 가능하며,
웹호스팅의 경우 웹사이트및 가상디렉토리를 선택하면 해당 디렉토리에 WCF구성파일을 생성해준다
(.svc 과 web.config)
테스트
위와같이 세팅이 되어 있다면 Visual Studio 2005 (Extensions for WPF and WCF 설치)나 Visual Studio 2008을 이용하여 테스트 가능하다
SvcUtil.exe 과 같은 툴로 스켈레톤 코드를 생성하여 포함시켜 사용해도 되고 VS 2008의 경우 서비스 참조를 하면 자동으로 생성을 해준다.
그리고 참조된 객체를 생성할때 생성자의 파라미터로 app.config에 설정되어 있는 endpoint 중에 하나를 선택하여 그 이름을 세팅하면 해당 endpoint를 이용하여 Communicaiton(통신)를 하게 된다.
{
int nResult = (int)s.Add(50, 58);
Console.WriteLine("result = {0}", nResult);
}
그러나 처음 실행하면 다음과 같은 오류를 뱉어낸다.
문에 통신에 사용할 수 없습니다.
이유는 COM+의 해당 패키지를 호스팅하는 프로세스가 객체를 자동 활성화 시키지 못해서 그런것 같다.
그러나 이미 활성화가 되어 있는 경우는 문제 없다.
어떻게 활성화를 자동으로 시킬지는 알아봐야 할듯...
COM+: COM 인스턴스를 만드는 동안 오류가 발생했습니다.
원본:
App ID: 593add39-f66f-442a-a901-01379dbac4eb
CLSID: 9833d2b6-d279-4bc3-b9be-7a4194c4a1b2
들어오는 트랜잭션 ID: 00000000-0000-0000-0000-000000000000
서로게이트: CDECL-DESK\cdecl
요청 ID: System.Runtime.InteropServices.COMException (0x80070542): 적어도 클라이언트 토큰은 Out of process Webhost 활성화를 위한 최소 가장의 SecurityImpersonationLevel을 갖고 있어야 합니다.
위치: System.ServiceModel.ComIntegration.ComPlusInstanceProvider.GetInstance(InstanceContext instanceContext, Message message)
예외: aspnet_wp
프로세스 이름: 22228
프로세스 ID: %9
위의 이유에서인지 MS에서는 WCF 서비스 형태로도 제공되는 COM+의 경우 해당 패키지를 서비스 형태로 실행하는 방법에 대해서 제시를 한다.
서비스 COM+ 패키지 -> 등록정보 -> 활성화 탭 -> "NT서비스로 응용프로그램 실행"
서비스 형태로 등록을 한 후 해당 패키지를 중지->시작 을 하면 서비스 형태로 실행이 되어 시스템 재시작 후에도 문제가 없다고 하는데...
기타
WCF의 COM+ 통합서비스를 하기 위해서는 XP및 Windows 2003 서버에 아래의 업데이트를 설치를 해줘야 한다.
Windows Communication Foundation용 업데이트(KB912817)
간략한 설명 :
MSDTC의 WS-AtomicTransaction 프로토콜에 대한 지원과 WCF(Windows Communication Foundation) COM+ 통합 기능에 대한 지원을 추가합니다.
'Dev > .NET' 카테고리의 다른 글
SerializeToXML - C# (0) | 2009.08.10 |
---|---|
C# Web Service -> REST (0) | 2009.08.09 |
Interop 응용 프로그램 배포 (0) | 2007.10.05 |
RCW, CCW (0) | 2007.10.04 |
"The underlying connection was closed" - WebServices (0) | 2005.10.13 |