如何控制webHttpBinding服务上的入站连接数?

时间:2014-11-26 17:39:39

标签: c# asp.net json wcf concurrency

我有一个标准的Web服务,它通过webHttpBinding处理JSON请求。我试图找出它可以处理多少并发连接以及如何控制它的限制。找不到任何东西。我遗漏了一些简单或某些设置?

这是我服务的骨架:

[ServiceContract]
public interface IMyService {...}

[ServiceErrorBehavior(typeof(ErrorHandler))]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class MyService : IMyService {...}

3 个答案:

答案 0 :(得分:1)

我对此有一些建议,但这不会是与配置直接相关的更改。坚持阅读本文。

在WCF中,为ServiceBehavior定义了InstanceContextMode和ConcurrencyMode属性。这些参数只能在服务代码中配置,而不能在XML配置中配置,因为它们与服务的运行时行为有关,服务开发人员应该知道它们的值。 InstanceContextMode参数确定WCF运行时必须创建的服务实例数。可能的值是:

  • PerCall :为每次调用创建一个新的InstanceContext对象。
  • PerSession :为每个会话创建一个新的InstanceContext对象。如果通道没有创建会话,则此值的行为就像是PerCall。这是默认值。
  • 单个:只有一个InstanceContext对象用于所有来电,并且在调用后不会被回收。如果服务对象不存在,则创建一个服务对象。

More helpful Blog

答案 1 :(得分:1)

使用WCF Service Throttling来控制服务。

<behaviors>
  <serviceBehaviors>
    <behavior  name="Throttled">
      <serviceThrottling 
        maxConcurrentCalls="1" 
        maxConcurrentSessions="1" 
        maxConcurrentInstances="1"
      />
    </behavior>
  </serviceBehaviors>
</behaviors>

始终记住,服务行为不会覆盖主机(或绑定)中定义的限制。例如,当使用webHttpBinding时,可能需要更改大型并发值的默认IIS Maximum Concurrent Connections

答案 2 :(得分:0)

事实证明,与线程有关的事情与其他事情有关。默认的ASP.NET设置非常保守,所以你必须加息。一旦我这样做,并发连接瓶颈就完全消失了。

确保在相应的machine.config(而不是web.config)中包含以下内容:

<configuration>
  <system.net>
    <connectionManagement>
      <add address="*" maxconnection="100" />
    </connectionManagement>
  </system.net>
  <system.web>
    <processModel 
        autoConfig="true"
        maxWorkerThreads = "100"
        maxIoThreads = "100"
        minWorkerThreads = "50"
        minIoThreads = "50"
         />
    <httpRuntime 
        minFreeThreads="176" 
        minLocalRequestFreeThreads="152" 
    />
  </system.web>
</configuration>

我从Stuart Brierley撰写的Tuning IIS文章中获取了所有这些信息。我从他的建议中唯一改变的是maxConnection值。