DCOM服务器和客户端都用.NET编写

时间:2011-02-22 10:37:13

标签: .net com dcom tlbimp

我正在开发.NET 4中的DCOM服务器(VS2010,C#)。它本身就可以正常工作。

现在,我还需要为此DCOM服务器开发.NET客户端,但我无法添加对TypeLib的引用。 Visual Studio将告诉我类型库是从.NET程序集导出的,不能作为参考添加。

this question的回答表明我应该能够使用TlbImp.exe来生成包装程序集,但它也会拒绝这样做:

  

TlbImp:错误TI1029:类型库   'MyWrapper'是从CLR导出的   装配,不能重新导入   CLR程序集。

据我所知,从纯粹的.NET角度来看,使用DCOM可能没有多大意义。但是,也应该可以从非.NET应用程序访问同一服务器。

我尝试将我的tlb转换为IDL并从中重新生成tlb,但这并不会欺骗Visual Studio。

也许可以在重新生成之前稍微修改IDL,或者是否有某种方法可以强制使用DCOM,即使服务器和客户端都是用.NET编写的?

1 个答案:

答案 0 :(得分:2)

我设法让DCOM工作,但我不确定它是否可以从TypeLib完成。修改IDL允许我导入类型库,但它最终在编译期间失败(尽管这被Visual Studio视为警告)。可能仍然可以对文件进行更多修改,但我使用的是更简单的解决方案。

DCOM服务器的所有接口定义都被移动到一个单独的程序集,然后直接从.NET客户端引用。这避免了导入问题。

然后,访问DCOM服务器与人们的期望没有什么不同:

Guid clsId = new Guid("XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX");
Type type = Type.GetTypeFromCLSID(clsId);
IMyInterface comObject = (IMyInterface)Activator.CreateInstance(type);

将接口移动到单独的程序集并不是绝对必要的,但这会最小化共享程序集的大小。