C# WCF多并发服务,仅限于单个应用程序域

C# WCF多并发服务,仅限于单个应用程序域,c#,wcf,iis,appdomain,C#,Wcf,Iis,Appdomain,我有一个已经运行了一年多的服务,每天收到50万到100万个请求,处理的处理量相当可观。通常,请求持续30-45秒。因此,我们为服务指定了使用ConcurrencyMode=Multiple和InstanceContextMode=PerCall。这对我们很有效 我遇到的问题是,我的代码中有一个区域使用单例模式来公开静态实例,我需要保证静态实例只能有一个副本。故障排除后我遇到的问题是,有多个应用程序域正在创建多个实例。这引起了一些问题。如何保证一个服务只创建一个应用程序域 没有直接回答以下问题:如

我有一个已经运行了一年多的服务,每天收到50万到100万个请求,处理的处理量相当可观。通常,请求持续30-45秒。因此,我们为服务指定了使用ConcurrencyMode=Multiple和InstanceContextMode=PerCall。这对我们很有效


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

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

将您的这个“单例”组件完全从IIS中分离出来,作为一个windows服务,并通过WCF命名的管道绑定使用它的服务,这样做怎么样?我使用了命名的pipe+WCF+win服务,发现该通信框架针对性能进行了大量优化。所有的ram/cpu成本都来自于在单例服务方法中运行的代码


当然,如果单例服务提供者需要与实际服务代码进行内存连接,那么这可能是个问题。仍然是一个想法。

如果您是在谈论代码方面的问题,可能值得查找Jon Skeets单例解决方案

但是,如果您正在运行整个程序的多个实例,那么您别无选择,只能提取对windows服务、web服务或数据库调用的单例调用