我有一个标准的Web服务,它通过webHttpBinding处理JSON请求。我试图找出它可以处理多少并发连接以及如何控制它的限制。找不到任何东西。我遗漏了一些简单或某些设置?
这是我服务的骨架:
[ServiceContract]
public interface IMyService {...}
[ServiceErrorBehavior(typeof(ErrorHandler))]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class MyService : IMyService {...}
答案 0 :(得分:1)
我对此有一些建议,但这不会是与配置直接相关的更改。坚持阅读本文。
在WCF中,为ServiceBehavior定义了InstanceContextMode和ConcurrencyMode属性。这些参数只能在服务代码中配置,而不能在XML配置中配置,因为它们与服务的运行时行为有关,服务开发人员应该知道它们的值。 InstanceContextMode参数确定WCF运行时必须创建的服务实例数。可能的值是:
答案 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值。