我有许多使用各种 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()
函数如果定时器到期则取消呼叫。但是,我想知道是否有更简单的方法来解决问题并确保超时。
有谁知道为什么会发生这种情况,如果是的话,有什么干净/简单/好的方法可以确保调用始终超时?
我可以猜测why它发生了,但没有给出解决方案:(
I suspect它陷入了 DNS 解析的困境。我见过各种“不算数”的情况 - 例如它最终发生在异步调用的启动线程上,或者它绝对不包含在超时中。
如果您能够通过拔出网络电缆来重现此情况,我建议使用 Wireshark 来确认我的猜测 - 这至少会建议进一步的调查途径。例如,也许 .NET 堆栈中的某处存在 DNS 超时,该超时通常是无限的,但可以进行调整。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)