【发布时间】:2010-12-12 02:05:09
【问题描述】:
我遇到了远程处理异常:
“此远程代理没有通道接收器,这意味着服务器没有注册的服务器通道正在侦听,或者此应用程序没有合适的客户端通道与服务器通信。”
原因最好用this blog entry来解释我发现:
第二种情况比较模糊。这 发生在客户打电话的地方 到服务器,服务器返回一个 对象引用,然后是客户端 调用被引用的对象 在服务器上。如果引用的 对象位于辅助 AppDomain 上 服务器上面的异常可能是 抛出。如果出现问题 是因为只有频道注册 适用于其中的 AppDomain RegisterChannel 被调用并且没有 频道已注册在 辅助应用程序域。物体 返回给客户端的引用 指向二级中的对象 AppDomain,不在其代理中 主 AppDomain,因此没有 客户端和客户端之间的通道 次要 AppDomain 通话可以通过。解决方法:注册一个 辅助 AppDomain 中的通道 被引用的对象存在于哪个位置。
这确实适合我的场景,因为我有一项服务可以将插件加载到单独的应用程序域中。对象实例(在所有程序集引用的程序集中定义的接口的实现)在辅助应用程序域中创建并由服务引用(跨应用程序域,因此服务具有代理引用)。然后服务将这些代理引用返回给应用程序。应用程序和服务之间有注册的通道,但插件和应用程序之间没有。
我认为代理足以跨越 appdomain 边界。我真的必须在插件和应用程序之间创建通道吗?这似乎根本不对,所以我一定是遗漏了什么。
【问题讨论】: