我有一个应用程序,需要有多个应用程序域来隔离潜在不安全的模块,并为非线程安全代码提供一定程度的隔离。每个模块都实现一个通用接口(interface),但也包含长期方法调用(分钟)。
在遥远的过去,当我做类似的事情时,我使用了 MarshalByRefObject
但我从 read that WCF现在是跨 AppDomain 边界进行通信的首选机制。
由于我想要多个应用程序域,并且每个请求可能会长期存在,因此我发现了几个问题:
- 我明确只需要一个线程在给定时间执行“工作”代码(因此 WCF 为每个请求实例化新主机类的默认方法是一个问题)
- 如何管理应用程序域列表/适当的端点以进行调用(如何通知每个 AD 要使用哪个端点/如何报告它随机选择的端点)
我最初计划对 AppDomain 进行异步调用,并在内部拥有某种形式的排队系统,使我能够监视/检索结果,但考虑到使用 WCF 以及覆盖足以控制服务实例化的麻烦主机对象(以允许对同一对象进行后续调用),我开始想知道是否应该阻塞所有调用并允许父进程处理所有线程问题。当然,那么我还需要确保给定应用程序域的待处理调用不会超过 1 个,并在父进程中执行排队。
有人有类似场景的经验/关于良好架构的建议/一篇不错的文章的链接吗?
最佳答案
WCF 框架非常适合通过远程过程调用机制使用消息交换模式编写面向服务的应用程序。 netNamedPipesBinding 可用于实现同一物理内存空间内单独 AppDomain 的“管理”,但这种控制级别并不是 WCF 的目的。
也许类似于 this blog post from Jeffery Richter 的东西更适合您正在尝试做的事情。
关于.net - 与多个应用程序域通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12051322/