受限于单个应用程序域的WCF多并发服务

时间:2013-11-05 15:58:08

标签: c# wcf iis appdomain

我的服务已经运行了一年多,每天有500,000 - 100万个请求受到攻击,并处理了大量的处理。通常,请求持续30-45秒。因此,我们已指定服务使用ConcurrencyMode = Multiple和I​​nstanceContextMode = PerCall。这对我们来说效果很好。

我遇到的问题是我的代码区域使用单例模式来公开静态实例,我需要保证它只能有一个副本。我在故障排除后遇到的问题是,有多个应用程序域创建多个实例。这导致了问题。如何保证只为服务创建一个应用程序域?

2 个答案:

答案 0 :(得分:2)

没有直接回答问题:我如何保证只为服务创建一个应用程序域?

如何将这个“单身人士”解耦?你的组件完全是在一个单独的进程中,在IIS之外,比如作为Windows服务并通过WCF-Named-Pipe绑定使用它的服务?我使用了命名管道+ WCF + win-service,并发现通信框架针对性能进行了大量优化。所有ram / cpu成本都是在单件服务方法中运行的代码。

当然,如果单件服务提供者需要与实际服务代码存储器连接,那么它可能是个问题。还是个主意。

答案 1 :(得分:0)

如果你在谈论代码,可能值得查找Jon Skeets Singleton解决方案here

但是,如果您正在运行整个程序的多个实例,那么除了将单例调用解压缩到Windows服务,Web服务或数据库调用之外别无选择。