我有一个应用程序需要在许多AppDomain之间发送适量的消息.我知道我可以使用远程处理实现这一点,但我也注意到有跨域委托.谁有人看过这种问题?
我使用带有命名管道绑定的WCF取得了很好的成功.使用命名管道不会创建网络流量并使用二进制编码,因此它应该非常快,而不会牺牲在未来扩展方案中分发的能力.
编辑:请参阅此处以获取更多详细信息,包括实施示例的链接.
跨域委托仅允许具有零参数的void方法,并且它可能不是您认为的那样.它只是一个简单的回调用于从一个appdomain到另一个appdomain的通知目的,例如像InitComplete()之类的方法.
Remoting是唯一的选择,无论你是将它称为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事件在子域和主机应用程序域之间创建异常驱动的通信:)