我们有一个完全在.NET 4.0(C#)中开发的三层应用程序。作为企业应用服务器,我们使用COM + 1.5(我知道这有点遗憾......)。在C#中为.NET 4.0开发了一个服务器部分和一个客户端部分。在没有代理安装的情况下调用COM +中的远程.NET DLL
服务器部分公开服务继承ServicedComponent类并返回实现“Serializable”属性的对象。客户端通过组件的COM +导出代理调用远程类。我们通过ClickOnce分发客户端应用程序,并且必须使用管理员权限将COM +生成的代理安装到每台客户端计算机上。这是不好的一点。
因此,我们正试图评估其他技术,使我们能够消除这种代理安装,但它不怎么清楚如何做到这一点。我们希望找到一种低影响的方式,使我们能够使用相同的COM +部分,并以某种方式将Proxy包括在客户端代码中。
我们试图在客户端部分使用这样的代码,但仍需要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 – robob
您可以使用免注册的COM:http://msdn.microsoft.com/en-us/library/ms973913.aspx? –