仅限于单个应用程序域的 WCF 多并发服务
Posted
技术标签:
【中文标题】仅限于单个应用程序域的 WCF 多并发服务【英文标题】:WCF Multiple Concurrency Service That is Restricted to Single App Domain 【发布时间】:2013-11-05 15:58:08 【问题描述】:我的服务已经运行了一年多,每天收到 500K 到 100 万次请求,并且处理了大量的处理。通常一个请求会持续 30-45 秒。因此,我们已指定服务使用 ConcurrencyMode = Multiple 和 InstanceContextMode = PerCall。这对我们来说效果很好。
我遇到的问题是我的代码区域使用单例模式来公开一个静态实例,我需要保证它只能有一个副本。故障排除后我遇到的问题是,有多个应用程序域创建多个实例。这导致了问题。如何保证只为一项服务创建一个应用程序域?
【问题讨论】:
【参考方案1】:不直接回答问题:如何保证只为一项服务创建一个应用程序域?,
如何将您的这个“单例”组件完全分离到一个单独的进程中,在 IIS 之外,例如作为 Windows 服务并通过 WCF-Named-Pipe 绑定使用其服务?我使用过named-pipe+WCF+win-service,发现通信框架针对性能进行了大量优化。所有 ram/cpu 成本都是在单例服务方法中运行的代码。
当然,如果 singleton-service-provider 需要与实际服务代码进行内存连接,那么这可能是个问题。还是一个想法。
【讨论】:
【参考方案2】:如果您在谈论代码方面的问题,可能值得查找 Jon Skeets Singleton 解决方案here
但是,如果您正在运行整个程序的多个实例,那么您别无选择,只能将单例调用提取到 Windows 服务、Web 服务或数据库调用。
【讨论】:
以上是关于仅限于单个应用程序域的 WCF 多并发服务的主要内容,如果未能解决你的问题,请参考以下文章