与多个应用领域进行通信

时间:2012-08-21 08:53:36

标签: .net wcf remoting appdomain .net-4.5

我有一个应用程序需要有多个应用程序域来隔离可能不安全的模块,并且还为非线程安全的代码提供了一定程度的隔离。每个模块实现一个通用接口,但也包括长期方法调用(分钟)。

在遥远的过去,当我做了类似的事情时,我使用了MarshalByRefObject,但我已经read that WCF成为跨越AppDomain边界进行通信的首选机制。

由于我想要多个应用程序域,并且每个请求可能都很长,我看到了几个问题:

  • 我明确只需要一个线程在给定时间执行“工作”代码(因此WCF默认为每个请求实例化一个新的主机类是一个问题)
  • 如何管理appdomains列表/相应的端点以进行调用(如何通知每个AD使用哪个端点/如何报告随机选择的端点)

我最初计划对AppDomain进行异步调用,并在内部设置某种形式的排队系统,允许我监视/检索结果,但是考虑到使用WCF和重写足以控制服务实例化的麻烦host对象(允许对同一个对象进行后续调用),我开始怀疑是否应该阻止所有调用并允许父进程处理所有线程问题。当然,那时我还需要确保我从来没有超过1个呼叫待处理给定的应用程序域并在父进程中执行排队。

有没有人对一个好的架构/链接到一个体面的文章有类似的场景/建议的经验?

1 个答案:

答案 0 :(得分:2)

WCF框架非常适合通过远程过程调用机制使用消息交换模式编写面向服务的应用程序。 netNamedPipesBinding可用于在同一物理内存空间内实现单独AppDomain的“管理”,但该控制级别不是WCF的用途。

也许this blog post from Jeffery Richter的某些内容更适合你想要做的事情。