仅限于单个应用程序域的 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 多并发服务的主要内容,如果未能解决你的问题,请参考以下文章

WCF服务——多合约实现

Web API 和 WCF 的比较

将未加入域的 PC 连接到 Azure 中的单个服务器

IIS / .Net 仅允许对给定用户会话的单个并发响应

WCF 错误 401 未经授权仅在某些电脑上

为每个 IIS 应用程序部署单个或多个 WCF 服务?