【问题标题】:.NET HttpWebRequest timeout apparently ignored on some computers.NET HttpWebRequest 超时在某些计算机上显然被忽略了
【发布时间】:2011-08-30 12:40:13
【问题描述】:

我们使用 HttpWebRequest 对象在应用程序的服务器和客户端部分之间交换数据。当服务器的 IP 无法访问或无效(这是发生的事情,应该发生)时,客户端要么在 3 秒后停止等待(这是我设置的超时),要么继续等待最多一分钟,具体取决于它在哪台计算机上运行! 代码如下:

HttpWebRequest webRequest = null;
WebResponse webResponse = null;
webRequest = (HttpWebRequest)WebRequest.Create(serverURL);
webRequest.Timeout = 1000 * 3; //3 seconds
webRequest.ReadWriteTimeout = webRequest.Timeout;
webRequest.AllowWriteStreamBuffering = true;
//Adding headers here; code removed
webRequest.Proxy = null;
webResponse = webRequest.GetResponse();

根据我在本网站和其他网站上找到的关于加快请求速度的建议,我还设置了 ReadWriteTimeout 属性并将 Proxy 设置为 null。 虽然它在我自己的计算机和我尝试过的其他计算机上 3 秒后正确停止,但在其他一些计算机上它直到大约 40 秒后才会停止。 我再说一遍,如果它尝试连接到 无效 地址,例如我们的子网中不存在的 IP,就会发生这种情况,并且“使用正确的 IP”是不可接受的解决方案(我可以解释原因,但我认为这会离题)。如果它连接到一个确实存在的 IP,那么数据交换就会像预期的那样快速。

有人见过类似的吗?

【问题讨论】:

  • 这40秒真的测出来了吗?你没有达到 15 秒的 DNS 超时时间,这在关于 Timeout property 的备注中列出
  • 我建议打开System.Net 的跟踪并检查日志。看到这个帖子blogs.msdn.com/b/dgorti/archive/2005/09/18/471003.aspx
  • 确实测量了 40 多秒。我读到 DNS 超时可能是“15 或更多”秒,所以我想这并不能免除它。有没有办法覆盖它?

标签: .net httpwebrequest timeout


【解决方案1】:

我不知道为什么会发生这种情况,但如果您有 IP(不是域名),我认为您可以使用 ping 作为解决方法:

Console.WriteLine(new Ping().Send(IPAddress.Parse(ipAddress)).Status);

【讨论】:

    猜你喜欢
    • 2013-10-17
    • 1970-01-01
    • 2020-06-10
    • 1970-01-01
    • 2012-11-08
    • 1970-01-01
    • 2023-04-02
    • 2013-06-22
    • 1970-01-01
    相关资源
    最近更新 更多