我正在调查我们的网络应用程序存在的性能问题。它使用4层架构,MVC4 webapp,WCF数据服务和SQLServer作为DB。 尽管有足够的可用资源,但数据服务并未真正扩展请求。它似乎只能并行回答10-12个请求并排队所有其他请求。我希望它能同时回答> 100个请求。
所有这些让我得出结论,单个Windows进程可能无法并行处理超过10-12个TCP连接。
这是真的吗?可以在某处配置吗?由于数据服务的设计,它不应该与多个进程一起运行,因为它使用了一个需要与所有其他实例同步的对象缓存。
Google似乎对此问题了解不多。
环境:Windows Server 2008 R2 / Windows Server 2012 R2,MVC4,WCF,.Net 4.5.1
Thomy
答案 0 :(得分:2)
<serviceBehaviors>
<behavior name="defaultServiceBehavior">
<serviceThrottling maxConcurrentCalls="100"
maxConcurrentInstances="100" maxConcurrentSessions="100" />
</behavior>
</serviceBehaviors>
以下是这些设置的摘要:
maxConcurrentCalls: defines the maximum number of messages actively processed by all the service instances of a ServiceHost. The default value is 16. Calls in excess of the limit are queued.
maxConcurrentInstances: defines the maximum number of service instances that can execute at the same time. The default value is Int32.MaxValue. Requests to create additional instances are queued and complete when a slot below the limit becomes available.
maxConcurrentSessions: defines the maximum number of sessions that a ServiceHost instance can accept at one time. The default value is 10. The service will accept connections in excess of the limit, but only the channels below the limit are active (messages are read from the channel).
答案 1 :(得分:1)
您可以尝试几件事
添加服务行为以最大化其可以处理的呼叫数量
<serviceBehaviors>
<behavior name="StandardServiceBehavior">
<serviceThrottling maxConcurrentCalls="1000" maxConcurrentInstances="1000" maxConcurrentSessions="10000"/>
</behavior>
</serviceBehaviors>
您是否尝试过使用服务行为中的并发模式?
可能会将服务行为设置为
[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple)]
请参阅此设置在此处执行的操作的完整说明。
http://msdn.microsoft.com/en-us/library/system.servicemodel.concurrencymode(v=vs.110).aspx
您可能还想尝试为wcf服务添加一些日志记录,请参阅此链接
http://msdn.microsoft.com/en-us/library/ms730064(v=vs.110).aspx
它应该让您更深入地了解实际发生的情况以及是否存在任何错误。有时我也看到,如果maxconcurrentcalls已被命中,它会将调用排入队列,这些会显示为警告。