我有一个多线程的Windows服务。每个线程调用WCF服务的各种方法。大约一段时间后,我对WCF服务所做的所有调用都会导致超时:
请求频道超时 尝试在00:10:00之后发送。 增加传递给的超时值 呼叫请求或增加 Binding上的SendTimeout值。该 分配给此操作的时间可能 是一段时间的一部分 超时
正如您所看到的超时是10分钟,我也试过了:
serviceThrottling maxConcurrentCalls="200" maxConcurrentInstances="200" maxConcurrentSessions="200"/>
但它没有帮助。
我已经使用Process Explorer检查了w3wp.exe,但是找不到任何可以指向某个地方的东西。 我对Web服务的所有连接都已关闭。
有没有人知道如何解决这个问题? 我想知道这些电话是否正常处理但是它们太多了,所以它们开始超时,还是它们挂在那里,只是等待?
我该如何查看? 我认为服务器只是过载,但只有CPU超过50%,内存不是。
答案 0 :(得分:1)
看看idleTimeout:
<system.web>
<hostingEnvironment idleTimeout="20"
shutdownTimeout="30"/>
</system.web>
通常设置为20分钟,您需要更改它。
<强>更新强> 更多信息:
答案 1 :(得分:0)
答案是性能指标。这是一个非常复杂的解决方案,您只需在某些跟踪中监控它即可。您需要用于健康监控的重量级工具=内置和自定义性能计数器。您可以为Windows服务实现自定义计数器,并监视每秒创建的呼叫数量以及完成的数量。您还可以使用build in counters进行WCF服务,以监视正在运行的实例数以及每秒处理的调用数。如果这些值差别很大,那么您就会遇到问题 - 您的服务充斥着无法及时处理的请求。
您也可以从简单测试开始,监控WCF服务处理的时间。如果您的处理时间为1秒,则根本无法每秒拨打200次以上的服务。