我创建了一个从ServicedComponent派生的.net类,并用COM +注册它。该组件实现的接口有一个返回IDataReader的方法。当我从我的客户端应用程序调用服务组件时,一切正常,我可以调用返回IDataReader的方法没有问题但是只要我在对象上调用一个方法就得到异常: “System.Runtime.Remoting.RemotingException:此远程处理代理没有通道接收器,这意味着服务器没有正在侦听的注册服务器通道,或者此应用程序没有合适的客户端通道与服务器通信。”
我对我的代码进行了一些修改,并意识到如果我创建了自己的可序列化的IDataReader实现(具有Serializable属性),它会起作用。如果实现派生自MarshalByRefObject,则失败。
那么,是否有可能通过COM + ServicedComponents引用返回标准.net对象,如果是这样,我需要做些什么才能实现呢?
答案 0 :(得分:1)
一篇关于COM与C#互操作的有趣文章,希望它有所帮助:
答案 1 :(得分:1)
当您的COM +客户端和COM +组件都受到管理时,CLR会尝试“智能”并尝试切换到使用.Net远程处理作为通信渠道。
要使此方案有效,您可以为实现IDataReader的对象注册远程处理通道。
不幸的是,我无法访问几年前我做过的代码,因此我无法发布样本。 : - (