我们正在构建一个应用程序(WinForms,.NET 3.5),将“插件”DLL加载到二级AppDomain中。辅助AppDomain需要偶尔与第一个AppDomain通信(更具体地说,从主AppDomain中创建的对象调用或获取数据)。
我读过大部分关于AppDomains和他们之间沟通的材料。
到目前为止,我看到的唯一简单的解决方案是从MarshalByRefObject继承并将一个TransparentProxy传递到第二个AppDomain中,在代理上调用方法。
这种方法有其缺点(在框架类型(例如,或者已经继承了另一个类、静态字段/类等)的情况下,不总是能够从MBRO继承)。
由于当前的通信点是相当恒定的(只有2-3种需要通信的场景),所以我考虑使用以下属性创建一个简单的Mediator类:
将调用这个代理对象上的方法,然后调用第一个AppDomain中“真实”对象上的方法。
我的问题--
发布于 2012-01-23 13:42:10
除非您出于某些原因特别希望避免WCF,否则我建议您考虑一下。具体来说,可以使用NetNamedPipeBinding,它提供了使用命名管道在同一台计算机上进行通信的功能。您可以在这里找到更多信息:http://msdn.microsoft.com/en-us/library/system.servicemodel.netnamedpipebinding.aspx
此外,这里还有一个相当简洁的博客文章展示了它的用途 (从WMP插件到第三方应用程序)。
根据对应用程序的描述,可以在第一个AppDomain中建立WCF服务,然后从第二个AppDomain调用该服务。
https://stackoverflow.com/questions/8972352
复制相似问题