gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 13:56:01 26 4
gpt4 key购买 nike

我正在.NET 4(VS2010,C#)中开发一个 DCOM 服务器。就其本身而言,这工作正常。

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

this question的答案建议我应该可以使用 TlbImp.exe生成一个包装程序集,但它也会拒绝这样做:

TlbImp : error TI1029 : Type library 'MyWrapper' was exported from a CLR assembly and cannot be re-imported as a CLR assembly.



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

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

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

最佳答案

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

DCOM 服务器的所有接口(interface)定义都移到了单独的程序集中,然后直接从 .NET 客户端引用。这绕过了导入问题。

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

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

将接口(interface)移动到单独的程序集并不是绝对必要的,但这可以最大限度地减少共享程序集的大小。

关于.net - DCOM 服务器和客户端都用 .NET 编写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5077011/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com