如何限制IIS中WCF服务的实例数?

时间:2009-12-18 20:46:12

标签: .net wcf iis iis-7

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

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

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

2 个答案:

答案 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中的属性? 您如何知道您的服务是通过客户端调用多次实例化的(而不是通过创建多个实例的服务器上的代码)?