我的WCF服务多次实例化,直到系统内存不足为止?如何在IIS 7中设置单个实例?
我的WCF服务已经设置为单个实例的属性,但IIS似乎忽略了这一点:
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single,
ConcurrencyMode = ConcurrencyMode.Multiple)]
答案 0 :(得分:5)
您可以将WCF服务定义为单例 - 我建议不要这样做。你会遇到很多麻烦 - 性能和扩展问题,要解决这些问题,你必须处理多线程,线程安全的编程 - 所有这些都非常混乱。
您应该使用每次调用实例化设置,并将服务器限制为您认为合理的任何内容。有一种称为“serviceThrottling”的服务行为,它允许您定义诸如要允许的服务类的并发实例数,要处理的并发调用数等等。
默认情况下,这些值设置得相当低,如果你有一个装备精良的服务器,你可以很容易地将它们调高一些。您可以在服务器的web.config中定义它,如下所示:
<behaviors>
<serviceBehaviors>
<behavior name="throttled">
<serviceThrottling
maxConcurrentCalls="16"
maxConcurrentInstances="26"
maxConcurrentSessions="10" />
</behavior>
</serviceBehaviors>
</behaviors>
(以上值是默认值)
使用这些优秀的博客文章了解服务限制及其所有细节:
答案 1 :(得分:0)
您是否可能覆盖web.config中的属性? 您如何知道您的服务是通过客户端调用多次实例化的(而不是通过创建多个实例的服务器上的代码)?