【问题标题】:C# HttpWebRequest ignores set timeoutC# HttpWebRequest 忽略设置超时
【发布时间】:2020-06-10 09:20:42
【问题描述】:

然后立即抛出一个 WebException 超时。

HttpWebRequest.Timeout 设置为 5000(= 5 秒)。 但是我什至不到 1 秒就得到了异常,那里出了什么问题?

而且默认值应该是 100 秒,默认情况下仍然会立即抛出异常。

来自 WebException 的确切消息: 操作已超时

这条消息是否还有其他含义?

以下行抛出此异常:

HttpWebResponse response = newRequest.GetResponse() as HttpWebResponse;

更奇怪的是:它只在至少 2 台计算机上运行了大约半年。

我未能以可读的方式输入更大的代码(丢失了编辑器的参数)。但是因为它只是在我不知道什么是相关的之前才起作用。这个东西实际上几个月都没有动过,只是起作用了。

【问题讨论】:

  • 你能分享一下产生异常的代码吗?
  • 服务器超时?
  • 服务器超时是什么意思?问题似乎是程序实际上并没有等待,只是抛出了超时。据我了解,如果超时限制设置为 5 秒,您实际上需要等待 5 秒才能获得超时。但是程序的作用是:“到达线路后立即抛出异常”它当然没有等待 5 秒,更不用说 100 秒了。
  • 客户端和服务器有两次超时。在您的情况下,您正在设置客户端超时。如果您的响应时间长于 5 秒,那么您将超时。可能存在服务器超时。您有一个超时值为 5 秒的客户端,但服务器在不到 5 秒内返回超时。所以我建议ping服务器,然后跟踪服务器主机路由以检查是否有服务器端超时。
  • 好的,我该如何检查?该地址通常可通过浏览器访问。 Alos ping 没有显示任何异常。 Traceroute 也不显示任何超过 100 毫秒的值。我仍然不明白它如何立即响应超时。但也只有 C# 并且它以前也有效。服务器端错误不会返回http响应吗?或者你认为防火墙以一种奇怪的方式拒绝这个特定的请求? (最近才开始这样做。)不要误会我的意思。有问题的提供者实际上确实在有问题的时间跨度内改变了一些东西。看起来还是很奇怪。

标签: c# timeout httpwebrequest


【解决方案1】:

几乎可以肯定是特定于连接另一端的网络/防火墙问题。 于是突然出现的问题不改我这边。

连接到其他服务器仍然有效。

但有问题的服务器会导致一些随机连接问题。所以我的猜测是,从我的应用程序的角度来看,连接在某个随机点中断。

我联系了管理员,如果得到确认,我会报告。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-22
    • 1970-01-01
    • 1970-01-01
    • 2020-08-25
    相关资源
    最近更新 更多