0

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

我稍微修改了我的代码,并意识到如果我创建自己的可序列化(具有 Serializable 属性)的 IDataReader 实现,它将起作用。如果实现派生自 MarshalByRefObject 则失败。

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

4

1 回答 1

1

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

要使此方案起作用,您可以为实现 IDataReader 的对象注册一个远程处理通道。

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

于 2008-09-25T04:29:33.517 回答