AppDomains之间的通信

时间:2012-01-23 13:26:49

标签: c# .net wcf marshalling appdomain

我们正在构建一个应用程序(WinForms,.NET 3.5),它将“插件”DLL加载到辅助AppDomain中。辅助AppDomain需要偶尔与第一个AppDomain通信(更具体地说,从主AppDomain中创建的对象调用或获取数据)。

我已经阅读了大部分有关AppDomains和它们之间通信的资料。

到目前为止,我见过的唯一简单解决方案是继承自 MarshalByRefObject 并传递 TransparentProxy 进入第二个AppDomain,在代理上调用方法。

此方法有其缺点(例如,在框架类型的情况下,或者已经从其他类继承的类型,静态字段/类等等,并不总是可以从MBRO继承。)

由于当前的通信点非常稳定(只有2-3个需要通信的场景),我考虑使用以下属性创建一个简单的 Mediator 类: / p>

  1. 将在第一个(主要)AppDomain中创建。
  2. 只能作为主要AppDomain中创建的“Real”对象的“message-passer”。
  3. 将从MBRO继承,并将其代理引用发送到第二个AppDomain。
  4. 将调用此代理对象的方法,然后调用第一个AppDomain中“真实”对象上的方法。

    我的问题 -

    1. 这看起来像是一种逻辑设计吗?
    2. 更重要的是,WCF或任何其他通信框架中是否已存在调解器/消息传递器类?它似乎是一个通用的概念,我想知道是否有类似的东西。

1 个答案:

答案 0 :(得分:5)

除非你因某种原因特别想避免WCF,否则我建议你去看看。具体来说,您可以使用NetNamedPipeBinding,它使用命名管道在同一台计算机上进行通信。您可以在此处找到更多信息: http://msdn.microsoft.com/en-us/library/system.servicemodel.netnamedpipebinding.aspx

同样,这里有一个相当简洁的blog entry demonstrating it's use(从WMP插件到第三方应用)。

根据您对应用程序的描述,您可以在第一个AppDomain中建立WCF服务,然后从第二个AppDomain调用该服务。