一段时间后(20分钟)获得WCF服务超时

时间:2010-09-14 17:23:39

标签: wcf

我有一个多线程的Windows服务。每个线程调用WCF服务的各种方法。大约一段时间后,我对WCF服务所做的所有调用都会导致超时:

  

请求频道超时   尝试在00:10:00之后发送。   增加传递给的超时值   呼叫请求或增加   Binding上的SendTimeout值。该   分配给此操作的时间可能   是一段时间的一部分   超时

正如您所看到的超时是10分钟,我也试过了:

serviceThrottling maxConcurrentCalls="200" maxConcurrentInstances="200" maxConcurrentSessions="200"/>

但它没有帮助。

我已经使用Process Explorer检查了w3wp.exe,但是找不到任何可以指向某个地方的东西。 我对Web服务的所有连接都已关闭。

有没有人知道如何解决这个问题? 我想知道这些电话是否正常处理但是它们太多了,所以它们开始超时,还是它们挂在那里,只是等待?

我该如何查看? 我认为服务器只是过载,但只有CPU超过50%,内存不是。

2 个答案:

答案 0 :(得分:1)

看看idleTimeout:

<system.web>
<hostingEnvironment idleTimeout="20"
                    shutdownTimeout="30"/>
 </system.web>

通常设置为20分钟,您需要更改它。

<强>更新 更多信息:

http://msdn.microsoft.com/en-us/library/bb332338.aspx

答案 1 :(得分:0)

答案是性能指标。这是一个非常复杂的解决方案,您只需在某些跟踪中监控它即可。您需要用于健康监控的重量级工具=内置和自定义性能计数器。您可以为Windows服务实现自定义计数器,并监视每秒创建的呼叫数量以及完成的数量。您还可以使用build in counters进行WCF服务,以监视正在运行的实例数以及每秒处理的调用数。如果这些值差别很大,那么您就会遇到问题 - 您的服务充斥着无法及时处理的请求。

您也可以从简单测试开始,监控WCF服务处理的时间。如果您的处理时间为1秒,则根本无法每秒拨打200次以上的服务。