将远程对象从一个App Domain传递到另一个进程

时间:2009-08-18 15:08:06

标签: c# process dns remoting

基本上我在我的第一个进程(服务)中有2个应用程序域,它与使用IPC远程处理在桌面上运行的另一个进程(exe)进行通信。在我的服务的第二个应用程序域中,我加载了我的插件,然后使用默认应用程序域中的界面与它们进行交互。这允许我通过卸载第二个应用程序域随时卸载插件。

这在服务过程中工作正常,但我发现的问题是当我想将其中一个插件对象(代理)传递给另一个进程并在进程应用程序域中运行时。如果我目前通过它,它会给我以下远程处理异常:

“此远程处理代理没有通道接收器,这意味着服务器没有正在侦听的注册服务器通道,或者此应用程序没有合适的客户端通道与服务器通信”

有没有办法实现我的目标,我想这是传递远程对象?这是一个很难描述的情况,所以请询问是否有用。任何建议都将不胜感激。

1 个答案:

答案 0 :(得分:1)

当我执行以下操作时,我在与您类似的情况下看到了此错误消息:

在服务流程中,我有2个应用域:A和B.

我在AppDomain B中设置了远程处理通道,并为远程进程创建了一个远程对象RemotableObject。

然后,我在AppDomain A中创建了一个对象anObject,并调用:

RemotableObject.PassProxyToOtherExe(anObject);

现在在远程进程的某个地方,我正在访问anObject(anObject.Name)的属性,这就是发生错误的地方!

我相信这是因为.NET尝试使用您请求的数据访问您在AppDomain A中创建的原始对象,但是,由于AppDomain A没有远程通道,因此在appdomain之间建立了远程通道B和远程进程,数据无法抓取。

为了在我的案例中解决这个问题,我在AppDomain B中创建了一个工厂,它将创建我想要的对象并将引用传递回AppDomain A(如果你通过远程处理,anObject需要继承MarshalByObjectRef)和它似乎有效。