我的服务已经运行了一年多,每天有500,000 - 100万个请求受到攻击,并处理了大量的处理。通常,请求持续30-45秒。因此,我们已指定服务使用ConcurrencyMode = Multiple和InstanceContextMode = PerCall。这对我们来说效果很好。
我遇到的问题是我的代码区域使用单例模式来公开静态实例,我需要保证它只能有一个副本。我在故障排除后遇到的问题是,有多个应用程序域创建多个实例。这导致了问题。如何保证只为服务创建一个应用程序域?
答案 0 :(得分:2)
没有直接回答问题:我如何保证只为服务创建一个应用程序域?,
如何将这个“单身人士”解耦?你的组件完全是在一个单独的进程中,在IIS之外,比如作为Windows服务并通过WCF-Named-Pipe绑定使用它的服务?我使用了命名管道+ WCF + win-service,并发现通信框架针对性能进行了大量优化。所有ram / cpu成本都是在单件服务方法中运行的代码。
当然,如果单件服务提供者需要与实际服务代码存储器连接,那么它可能是个问题。还是个主意。
答案 1 :(得分:0)
如果你在谈论代码,可能值得查找Jon Skeets Singleton解决方案here
但是,如果您正在运行整个程序的多个实例,那么除了将单例调用解压缩到Windows服务,Web服务或数据库调用之外别无选择。