【发布时间】:2011-05-01 09:05:45
【问题描述】:
我们有一个 WCF 服务自托管在 Windows 服务中。现在我们遇到了一个非常奇怪的行为,即大约每 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 操作系统上。调用该服务的客户端是两个不同的 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 秒。此外,所有其他事务都成功完成,与服务负载无关。
我无法增加一分钟的超时时间,因为该服务用于执行电子商务操作,而且实际上只需几秒钟即可完成。
这是事实,我希望你们能想出一些我还没有尝试过的东西。在回答时请记住,这是一项关键任务服务,并且可能在生产环境中应用的更改或配置非常有限。
提前致谢。
【问题讨论】: