网络电话永远不会超时

时间:2011-02-24 07:08:59

标签: c# web-services timeout

我有许多使用各种Web技术的应用程序,例如SOAP,WCF服务或简单的XmlReader。然而,如果互联网连接在错误的时间出现问题,他们似乎都会遇到错过超时和无限悬挂的问题。

我已将所有情况下的超时设置为小的,例如对于wcf

closeTimeout="00:00:15" openTimeout="00:00:15" 
receiveTimeout="00:00:15" sendTimeout="00:00:15"

或肥皂

_Session.Timeout = (int)TIMEOUT.TotalMilliseconds;

这些超时通常会受到影响,但似乎有一些特殊情况,如果互联网在正确的时间退出,呼叫将挂起并且永远不会超时(使用同步呼叫)。

我正在考虑每次拨打电话时启动一个计时器,并在计时器到期时使用适当的.Abort()功能取消呼叫。但是,我想知道是否有更简单的方法来解决问题并确保超时被击中。

有谁知道为什么会发生这种情况,如果有的话,干净/简单/好的方法是什么,以确保电话总是超时?

1 个答案:

答案 0 :(得分:4)

我可以猜到为什么它会发生,但没有给出解决方案:(

怀疑它正在陷入DNS解析。我已经看到了“不计算”的各种情况 - 例如它最终发生在异步调用的启动线程上,或者它绝对没有包含在超时中。

如果您能够通过拔出网线重现这一点,我建议使用Wireshark来确认我的猜测 - 这至少可以提出进一步的调查途径。也许在.NET堆栈的某处有一个DNS超时,通常是无限的,但可以调整,例如。