【问题标题】:WCF Service failing every 23 hours with "The request channel timed out while waiting for a reply after 00:01:00"WCF 服务每 23 小时失败一次,并显示“请求通道在 00:01:00 之后等待回复时超时”
【发布时间】: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 秒。此外,所有其他事务都成功完成,与服务负载无关。

我无法增加一分钟的超时时间,因为该服务用于执行电子商务操作,而且实际上只需几秒钟即可完成。

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

提前致谢。

【问题讨论】:

    标签: asp.net wcf


    【解决方案1】:

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

    另一种遥不可及的可能性是第 2 代垃圾收集,但中断时间也很长。

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

    .NET CLR Memory Performance Counters: # 第 2 代合集

    WCF Performance Counters

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

    【讨论】:

    • 嗨,米奇。您能否指定哪些性能计数器更适合跟踪此事件?请记住,该服务是自托管在 Windows 服务中的。谢谢你的回答。
    • 再次感谢米奇。我忘了提到在这些时间没有定期备份或任何其他类型的计划任务,并且病毒扫描程序已安装并成功运行。
    【解决方案2】:

    您的客户端上的时间是否在不同的时区?他们和服务器有相同的时间吗?

    尝试设置 MaxClockSkew。

    【讨论】:

    • 嗨,杰夫。所有服务器(包括数据库服务器)都同步到本地 NTP 服务器。但是,如果您可以指定不同时区如何产生超时,我们将不胜感激。提前致谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-04
    • 1970-01-01
    • 2016-05-20
    • 1970-01-01
    • 2021-06-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多