WCF服务每23小时失败一次“请求频道在等待00:01:00之后的回复时超时”

时间:2010-10-27 14:53:21

标签: asp.net wcf

我们在Windows服务中自托管了WCF服务。现在我们正在经历一个非常奇怪的行为,即大约每23个小时,服务因为每次调用而引发异常,并出现以下错误:

Server was unable to process request. ---> The request channel timed out while waiting for a reply after 00:01:00. Increase the timeout value passed to the call to Request or increase the SendTimeout value on the Binding. The time allotted to this operation may have been a portion of a longer timeout.---> The HTTP request to 'http://servername:8016/servicio/Autorizaciones' has exceeded the allotted timeout of 00:01:00. The time allotted to this operation may have been a portion of a longer timeout.---> The operation has timed out.

故障的持续时间在4到6分钟之间,并且在没有任何接触的情况下,服务然后退出故障并且接下来的响应是可以的,接下来的23个小时,然后是错误。

如上所述,WCF服务是在Windows服务中自托管的,安装在Windows 2008 Server OS上。调用该服务的客户端是两个不同的Asp.NET Web服务,一个在同一服务器上运行,另一个在生产环境中的虚拟服务器上运行。两位客户都提出了同样的问题。

完整环境的配置如下:在IVR系统(例如节点1)中接收电话呼叫,该系统调用Web服务(节点2),该服务检索有关客户呼叫的一些信息。一旦客户批准操作,IVR就调用Web服务(节点2),该服务将呼叫中继到WCF服务(节点3)以处理信用操作。然后,WCF通过到另一个实体(节点4)的VPN连接进行TCPIP套接字操作。该通信持续3到10秒,在持久性数据库中注册,然后以相同的路径发送回客户(节点3,2和1)。该平台每天24/7处理大约2,000个事务,但超时失败的事务除外。将事务中继到第二个服务的原因是出于安全目的。每次调用中交换的数据量大约为200或300字节。

我已经尝试过在stackoverflow(WCF timeout exception detailed investigation)中发布的大部分解决方法,以及那些在google中发现的其他一些解决方法。该错误仍然存​​在。

TCPIP套接字操作被记录到文本文件中,并且没有发现外部实体的响应时间问题。最长的时间是9秒。此外,还记录了数据库操作跟踪,并且未显示任何性能问题。

该服务的并发模式设置为ConcurrencyMode.Multiple,在投入生产之前,我们对10个客户进行了2小时的迭代调用进行压力测试,处理wcf服务大约30k个事务,没有任何性能影响迹象。但是,我已经放弃了并发问题,因为事务之间的平均时间是一分钟,而最大的一次持续时间约为9秒。此外,所有其他事务成功完成,与服务负载无关。

鉴于该服务是用于执行电子商务操作而事实上没有什么真正花费超过几秒钟的时间完成,我无法增加一分钟的超时。

这是事实,我希望你们能想出一些我还没有尝试过的东西。在回答这是一项关键任务服务时请记住,并且可能在生产环境中应用的更改或配置非常有限。

提前致谢。

2 个答案:

答案 0 :(得分:1)

事实上,它每23个小时发生一次,听起来像是一个应用程序池回收(但是4到6分钟的中断似乎太长了)。

另一个远程可能性是第2代垃圾收集,但停机时间也很长。

您可以使用相应的内置性能计数器显然跟踪这些。

.NET CLR Memory Performance Counters:#Gen 2 Collections

WCF Performance Counters

[你确定没有某种定期备份被启动吗?  你在那台机器上有病毒扫描程序吗?]

答案 1 :(得分:0)

您客户的时间是否在不同的时区?它们与服务器的时间是否相同?

尝试设置MaxClockSkew。