Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 网络呼叫从不超时_C#_Web Services_Timeout - Fatal编程技术网

C# 网络呼叫从不超时

C# 网络呼叫从不超时,c#,web-services,timeout,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)TI

我有许多应用程序使用各种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()
函数取消通话。但是,我想知道是否有更简单的方法来解决这个问题并确保超时得到满足

有人知道为什么会发生这种情况吗?如果是的话,有什么干净/简单/好的方法可以确保呼叫始终超时?

我可以猜测为什么会发生这种情况,但没有给出解决方案:(

我怀疑它正在赶上DNS解析。我见过各种情况下,这种情况“不算数”——例如,它最终发生在异步调用的启动线程上,或者它肯定没有包含在超时中


如果您能够通过拔出网络电缆来重现这一点,我建议使用Wireshark来确认我的猜测-这至少会为进一步的调查提供建议。可能.NET堆栈中的某个位置存在DNS超时,通常是无限的,但可以调整。例如。

有趣的信息,谢谢。我可能是堆栈中较低的部分很难处理。不幸的是,它很难复制,但我将尝试进一步研究。
HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\dnsquerytimeout
:确定域名系统(DNS)的长度客户端等待对名称解析过程中五次尝试中的每一次的响应。谢谢。我在Windows 7或XP框中都找不到名为DNSqueryTimeout的条目。看起来默认值加起来最多为15秒(这是我在其他地方读到的数字).所以它应该默认为15秒?如果是这样的话,这没问题,因为15秒的超时是可以的。事实上,它从来没有超时和锁定线程(我假设端口也是),这是我的主要问题。新的潜在客户-我想这可能与使用web引用有关(看起来只是来自.net 2)而不是服务引用。切换到服务引用可能会带来更可靠的代码?我无论如何都在尝试,看看它是否至少修复了这些web调用。