오늘은 ATL 라이브러리를 사용하여 VC++ 7.x (Visual Studio 2003 및 .Net 1.1)를 사용하여 out-of-process (즉 EXE) COM 서버를 작성했습니다. 이 서버는 MTA (Multi Threaded Apartment) 모델을 사용했으며 DCOM 호출 (VB6 클라이언트)에 의해 활성화되었습니다. 여러 클라이언트 요청은 첫 번째 요청 (COM 인프라에 의해 자동으로)에 의해 활성화되는 단일 프로세스에 의해 충족됩니다.기존 클라이언트를 손상시키지 않고 이전 DCOM 서버를 다시 구현하려면 어떻게해야합니까?
꽤 복잡한 코드 조각이었습니다. 이제 코드를 약간 변경해야합니다. 불행히도 필자가 구축 한 시스템은 오래 전에 사라졌고 VS 2003을 사용하여 새 컴퓨터에서 프로젝트를 컴파일하는 데 문제가 있습니다. 몇 년 전이 프로젝트를 VS 2005로 옮겨 놓은 것을 보았습니다. ATL 라이브러리에 대한 변경 사항을 깨고 그 노력을 포기했습니다.
이 낡은 VS 2003 C++ 프로젝트를 구축 할 때의 현재의 문제를 다루기보다는 .NET에서 다시 작성하는 것에 관심이 있습니다. 이것은 내 작은 가게 (우리가 C++을 더 이상 사용하지 않는 곳)에서 훨씬 더 유지 보수가 가능할 것입니다. ATL 매크로와 C++ 숙어는 내 기억에서 사라진 지 오래되었으며, 나는 거기에 머물고 싶습니다. :-)
그래서 C#/VS2008에서이 rewite를 실행하는 것이 얼마나 실현 가능한지 모색하고 있습니다. .NET 클래스를 COM 클라이언트에 노출 할 수 있다는 것을 알고 있습니다. 사실 나는 과거의 간단한 것들로 그렇게했습니다. 그러나 이것은 훨씬 더 복잡합니다. 나는 여러 가지의 확실하지 않다 : 인터페이스가 모든 클라이언트에 의해 소비되는 형식 라이브러리에 정의되어
(즉 unmodifed 유지해야합니다). 기존 형식 라이브러리를 기반으로 이러한 인터페이스를 구현하는 .NET 서버를 구축 할 수 있다고 가정 해 봅시다.
서버는 IDispatch를 상속하고 "이중"및 "oleautomation"으로 표시된 여러 인터페이스를 구현합니다. 예를 들어 :
[odl, uid(...), dual, oleautomation] interface IKDFTSearchManager : IDispatch { HRESULT Method1(...); HResult Method2(...); }
나는 클라이언트의이 IDispatch 메서드를 사용하는 것이 생각하지 않는다, 그러나 나는 상호 운용성에 의해 생성 된 VTABLE가 일치해야한다고 가정합니다. .NET 서버에서이를 어떻게 노출시킬 수 있습니까?
어떤 유형의 프로젝트에 구성 요소가 있어야합니까? 콘솔 응용 프로그램?
DCOM은 interop 도구 중 하나에 적절히 등록 된 경우 EXE를 활성화 할 수 있습니다. 그럴까요? C++/ATL 서버에서와 마찬가지로 인프라가 작동합니까? 즉, 여러 클라이언트 요청을 처리하는 단일 EXE가 활성화됩니다.
(4)와 관련하여이 서버는 다중 스레드 아파트 모델을 사용합니까?