【问题标题】:How to limit the number of instances of a WCF service in IIS?如何限制 IIS 中 WCF 服务的实例数?
【发布时间】:2009-12-18 20:46:11
【问题描述】:

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

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

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

【问题讨论】:

    标签: .net wcf iis iis-7


    【解决方案1】:

    可以将 WCF 服务定义为单例 - 我建议不要这样做。你会给自己带来很多麻烦——性能和扩展问题,而要解决这些问题,你必须处理多线程、线程安全的编程——这一切都非常混乱。

    您应该做的是使用每次调用的实例化设置,并将您的服务器限制在您认为合理的范围内。有一种称为“serviceThrottling”的服务行为,它允许您定义诸如您想要允许多少个服务类的并发实例、您想要处理多少个并发调用等等。

    默认情况下这些值设置得相当低,如果你有一个装备精良的服务器,你可以很容易地把它们调高一点。您可以在服务器的 web.config 中这样定义:

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

    (以上为默认值)

    通过这些优秀的博客文章了解服务限制及其所有详细信息:

    【讨论】:

    • 总是你回答我所有的 WCF 问题 =)
    • 在 IIS 中,节流或单例对我都不起作用。不过,它可以作为自托管服务使用。
    【解决方案2】:

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

    【讨论】:

    • 我没有在 web.config 中覆盖这个属性
    猜你喜欢
    • 2010-11-26
    • 2010-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多