2009-12-18 45 views
1

我的WCF服务被实例化多次,直到系统内存不足?如何在IIS 7中设置单个实例?如何限制IIS中WCF服务的实例数量?

我的WCF服务已被设置为通过属性的单个实例,但是IIS似乎忽略了这一点:

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, 
    ConcurrencyMode = ConcurrencyMode.Multiple)] 

回答

7

可能定义一个WCF服务作为一个单身 - 我会建议不要这样做。你会遇到很多麻烦 - 性能和扩展问题,为了解决这些问题,你必须处理多线程,线程安全的编程 - 这一切都很麻烦。

你应该做的是使用每个通话实例化设置,并将您的服务器限制在任何你认为合理的地方。有一种叫做“serviceThrottling”的服务行为,它允许你定义你想要允许的服务类的并发实例数量,你想要处理的并发呼叫数量等。

这些值设置的很低默认情况下,如果你有一个装备精良的服务器,你可以轻松地进行一些调整。你在你的服务器的web.config这个定义是这样的:

<behaviors> 
    <serviceBehaviors> 
     <behavior name="throttled"> 
      <serviceThrottling 
       maxConcurrentCalls="16" 
       maxConcurrentInstances="26" 
       maxConcurrentSessions="10" /> 
     </behavior> 
    </serviceBehaviors> 
</behaviors> 

(以上数值均为缺省值)

阅读上的服务节流和所有的细节与这些优秀的博客文章:

+0

总是你回答我所有的WCF问题=) – 2009-12-18 22:04:14

+0

请继续 – 2009-12-18 22:08:32

+0

限制或单身人员都不适合我在IIS中工作。尽管它作为一个自己托管的服务。 – 2009-12-19 17:10:11

0

你可能会覆盖web.config中的属性? 你怎么知道你的服务正在被客户端调用多次实例化(而不是通过创建多个实例的服务器上的代码)?

+0

我不是覆盖web.config中的这个属性 – 2009-12-18 20:55:27