我有一个应用程序需要在多个AppDomain之间发送适量的消息。我知道我可以使用远程实现,但我也注意到有跨域代理。有没有人看过这种问题?如何最好地在AppDomains之间进行通信?
回答
我使用WCF和命名管道绑定取得了很好的成功。使用命名管道不会创建网络流量并使用二进制编码,因此它应该非常快速,而不会牺牲在未来扩展方案中分发的能力。
编辑: 请参阅here了解更多详细信息,包括实施示例的链接。
这只是一个快速的想法,但我听说即使是跨域通信WCF将是推荐的方法,当然从.NET 3.0开始。其实这是有道理的,因为远程处理只是WCF包装的另一项技术。
跨域委托只允许使用零参数的void方法,这可能不是您认为的那样。作为从一个appdomain到另一appdomain进行通知的简单回调,例如像InitComplete()之类的方法。
远程处理是唯一的选择,无论是将其称为WCF还是其他类型,传递可串行化类型或使用MBRO类型(MarshalByRefObjects)。这不像你想象的那么难。
-Oisin
我才发现,原来你也可以使用AppDomain.SetData但这只是一种方式 从主机域名到子域。
static void RunInChildDomain()
{
AppDomain childDomain = AppDomain.CreateDomain("friendlyName");
string parameterValue = "notmii";
childDomain.SetData("parameter", parameterValue);
childDomain.DoCallBack(PrintName);
}
static void PrintName()
{
string Name = Convert.ToString(AppDomain.CurrentDomain.GetData("parameter"));
Console.WriteLine(Name);
}
您也可以通过使用AppDomain.FirstChanceException事件创建子和主机应用程序域之间的异常驱动的通信:)
我想在x开的答案扩大。他建议使用WCF或MarshalByRefObject,但考虑到问题是关于AppDomain之间的通信,而不是关于进程之间的通信,我认为MBRO方法的实现简单得多,因此是正确的答案。
当我自己研究这个问题时,我首先努力了解孩子AppDomain如何与父母沟通,直到我意识到您可以将一个MBRO对象的句柄传递给孩子,然后孩子可以解开该句柄以传回父(或任何其他AppDomain)。我发布了一个解决方案给我自己的问题here。
我后来得知您可以定义一个接口,在复杂的类上实现该接口,然后只传递一个句柄到接口。这可以大大减少加载子AppDomain可能需要的程序集数量。
- 1. 如何在帧之间进行通信?
- 2. 如何安全地在PHP和WCF之间进行通信
- 3. 如何有效地在两个程序之间进行通信?
- 4. 如何在C#中进行进程间通信时进行进程间通信?
- 5. 如何在Firefox插件和android进程之间进行通信?
- 6. 如何使用FIFO在python子进程之间进行通信
- 7. 在UIDatePicker和UITableView之间进行通信
- 8. 在C++和C#之间进行通信?
- 9. 在Java类之间进行通信
- 10. 在JavaScript和Servlet之间进行通信
- 11. 本地连接:在flex 4.1和flash之间进行通信as2
- 12. 如何通过时间戳最好地保存聊天信息?
- 13. 如何序列化第三方类型以通过AppDomains进行通信?
- 14. 如何在Android上的应用程序之间进行通信
- 15. 如何在反应中的方法之间进行通信?
- 16. C++如何在应用程序的DLL之间进行通信?
- 17. 如何在python和mac应用程序之间进行通信?
- 18. 如何在两个JavaScript对象文字之间进行通信?
- 19. 如何在.NET EXE和COM EXE之间进行通信?
- 20. 如何在JavaScript中的线程之间进行通信?
- 21. 如何在Ember.js中的控制器之间进行通信
- 22. C#如何在两台服务器之间进行通信
- 23. 如何在ractive组件之间进行通信?
- 24. 如何在GWT中的两个模块之间进行通信
- 25. 如何在labview和DM软件之间进行通信
- 26. GWT与MVP:如何在2个视图之间进行通信?
- 27. 如何在两个线程之间进行通信
- 28. 如何在两个Weblogic域之间进行通信?
- 29. Azure Web API - 如何在服务之间进行通信
- 30. 如何在Windows Vista Session 0和桌面之间进行通信?
使用命名管道的WCF看起来像我最喜欢的 - 我至少可以避免进入网络的必要性。感谢大家! – 2008-11-24 15:34:24
有关详细说明这项技术?例如,与AppDomain和MBRO(MarshalByRefObject)相比,使用命名管道的性能成本以及易用性如何。 – 2012-01-19 22:18:19