重负载下的WCF客户端超时

时间:2011-10-14 09:21:02

标签: wcf

我已经在这里问了一个类似的问题:WCF Service calling an external web service results in timeouts in heavy load environment但我现在对于发生了什么事情有了更好的想法,所以发布了一个新问题。

这就是发生的事情:

  • .NET客户端同时向WCF服务发送多个请求(如果它有帮助 - 我正在使用Visual Studio负载测试复制此scneario)
  • 客户端已将“sendTimeout”设置为5秒
  • WCF服务接收它并开始处理它。处理涉及向外部服务发送请求,该请求可能需要大约1秒才能带回来
  • 这就是我认为问题所在:客户端已向服务发送了许多请求,并且由于服务仍忙于处理并发请求,因此客户端的一些请求会在5秒后超时

我尝试了以下内容:

  • 将InstanceContextMode更改为PerCall
  • 增加maxConcurrentCalls&的值。 maxConcurrentInstances
  • 增加machine.config
  • 中connectionManagement.maxconnection的值

但这些似乎没有任何区别。有谁知道如何确保我不会遇到此超时问题?

2 个答案:

答案 0 :(得分:0)

好的,你说WCF,这还不够。你使用什么绑定以及你在哪里托管它?如果您使用的是IIS,则可能是与自托管不同的潜在问题。

可能的原因是ThreadPool的数量很少。您可以使用ThreadPool.SetMaxThreads()来更改此设置,但要注意这是一个敏感值。看看here

答案 1 :(得分:0)

查看以下链接:
http://weblogs.asp.net/paolopia/archive/2008/03/23/wcf-configuration-default-limits-concurrency-and-scalability.aspx

我不确定你想要实现的目标。由于WCF服务正在执行耗时的操作,因此您无法使其超载并期望它能够正常运行。您可以执行以下操作(查看有关设置以下内容的链接):

  1. 增加wcf服务的接收能力
  2. 增加服务的发送超时
  3. 增加客户端的发送超时
  4. 增加客户端的接收超时时间
  5. 限制与wcf服务的传出连接
  6. 最好和最强大的选择是配置和使用MSMQ和WCF服务。