如何限制IIS中WCF服务的实例数量?
问题描述:
我的WCF服务被实例化多次,直到系统内存不足?如何在IIS 7中设置单个实例?如何限制IIS中WCF服务的实例数量?
我的WCF服务已被设置为通过属性的单个实例,但是IIS似乎忽略了这一点:
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single,
ConcurrencyMode = ConcurrencyMode.Multiple)]
答
你可能定义一个WCF服务作为一个单身 - 我会建议不要这样做。你会遇到很多麻烦 - 性能和扩展问题,为了解决这些问题,你必须处理多线程,线程安全的编程 - 这一切都很麻烦。
你应该做的是使用每个通话实例化设置,并将您的服务器限制在任何你认为合理的地方。有一种叫做“serviceThrottling”的服务行为,它允许你定义你想要允许的服务类的并发实例数量,你想要处理的并发呼叫数量等。
这些值设置的很低默认情况下,如果你有一个装备精良的服务器,你可以轻松地进行一些调整。你在你的服务器的web.config这个定义是这样的:
<behaviors>
<serviceBehaviors>
<behavior name="throttled">
<serviceThrottling
maxConcurrentCalls="16"
maxConcurrentInstances="26"
maxConcurrentSessions="10" />
</behavior>
</serviceBehaviors>
</behaviors>
(以上数值均为缺省值)
阅读上的服务节流和所有的细节与这些优秀的博客文章:
答
你可能会覆盖web.config中的属性? 你怎么知道你的服务正在被客户端调用多次实例化(而不是通过创建多个实例的服务器上的代码)?
+0
我不是覆盖web.config中的这个属性 – 2009-12-18 20:55:27
总是你回答我所有的WCF问题=) – 2009-12-18 22:04:14
请继续 – 2009-12-18 22:08:32
限制或单身人员都不适合我在IIS中工作。尽管它作为一个自己托管的服务。 – 2009-12-19 17:10:11