2

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

在遥远的过去,当我做类似的事情时,我使用过,MarshalByRefObject但后来我读到 WCF现在是跨 AppDomain 边界进行通信的首选机制。

由于我想要多个应用程序域并且每个请求都可能是长期存在的,因此我看到了几个问题:

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

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

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

4

1 回答 1

2

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

也许Jeffery Richter 的这篇博客文章中的内容更适合您尝试做的事情。

于 2012-08-21T13:32:00.573 回答