返回IDataReader的.net COM +对象

时间:2020-03-06 14:38:03  来源:igfitidea点击:

我创建了一个从ServicedComponent派生的.net类,并将其注册到COM +。此组件实现的接口具有返回IDataReader的方法。当我从客户端应用程序调用服务组件时,一切正常,我可以调用返回IDataReader的方法没有问题,但是一旦在对象上调用方法,我就会得到异常:
" System.Runtime.Remoting.RemotingException:该远程代理没有通道接收器,这意味着服务器没有正在侦听的注册服务器通道,或者此应用程序没有合适的客户端通道可以与服务器进行通信。"

我对我的代码进行了相当多的修改,并意识到,如果我创建了自己的可序列化的IDataReader实现(具有Seri​​alizable属性),它将可以正常工作。如果实现是从MarshalByRefObject派生的,则它将失败。

因此,是否有可能通过COM + ServicedComponents的引用返回标准的.net对象,如果是的话,我需要做些什么来实现它?

解决方案

关于COM与C#互操作的有趣文章,希望对我们有所帮助:

http://www.codeproject.com/KB/COM/cominterop.aspx

当同时管理COM +客户端和COM +组件时,CLR会变得"智能",并尝试切换为使用.Net远程处理作为通信通道。

为使此方案可行,我们可以为实现IDataReader的对象注册一个远程通道。

不幸的是,我无法访问几年前的代码,因此无法发布示例。 :-(