【发布时间】:2012-05-13 20:09:02
【问题描述】:
我们有一个完全使用 .NET 4.0 (C#) 开发的三层应用程序。作为企业应用服务器,我们使用 COM+ 1.5(我知道它有点过时......)。有一个服务器部分和一个客户端部分都是用 C# 为 .NET 4.0 开发的。
服务器部分公开继承 ServicedComponent 类的服务并返回实现“Serializable”属性的对象。客户端通过组件的 COM+ 导出代理调用远程类。我们通过 ClickOnce 分发客户端应用程序,我们必须以管理员权限将 COM+ 生成的代理安装到每台客户端计算机上。这是不好的地方。
因此,我们正在尝试评估其他技术来消除这种代理安装,但目前还不清楚如何做到这一点。我们希望找到一种低影响的方式,允许我们使用相同的 COM+ 部分,并以某种方式将代理包含到客户端代码中。
我们已经尝试在客户端部分使用这样的代码,但仍然需要 COM 注册。
Type comObjectType = Type.GetTypeFromProgID("SumNameSpace.SumClass", "servercomplus", true);
SumInterface comObject = Activator.CreateInstance(comObjectType) as SumInterface;
我们认为在客户端部分使用接口而不是类必须工作,但我们有一个例外:
Runtime.InteropServices.COMException (0x800401F3): Invalid class string (Exception from HRESULT: 0x800401F3 (CO_E_CLASSSTRING))
如果 Windows 注册表中没有关于接口的正确信息,应该会发生此错误,但我们不知道...
有什么想法吗?
非常感谢
【问题讨论】:
-
您检查过潜在的 32/64 位问题吗?
-
我在 32 位 Windows VISTA 上尝试过,但出现同样的错误! tnx
-
可以用免注册的COM:msdn.microsoft.com/en-us/library/ms973913.aspx吗?
-
它似乎不适用于本机程序集 COM。它仅适用于具有独立属性的 ActiveX COM……但我不确定。如果有人有一个用 .NET 开发的客户端的示例,希望使用用 .NET 代码开发的 COM,那就更好了!
标签: c# .net com com-interop com+