Web 请求中的超时似乎不被遵守

本文关键字:请求 超时 Web | 更新日期: 2023-09-27 17:55:59

我希望我的 http get 请求失败,如果它花费超过 10 秒的时间。

我有这个:

var request = (HttpWebRequest)WebRequest.Create(myUrl);
request.Method = "GET";
request.Timeout = 1000 * 10; // 10 seconds
HttpStatusCode httpStatusCode = HttpStatusCode.ServiceUnavailable;
using (var webResponse = (HttpWebResponse)request.GetResponse())
{
    httpStatusCode = webResponse.StatusCode;
}

当我在请求中放置错误的 URL 时,它似乎没有超时,它只是持续了很长时间(似乎是几分钟)。

这是咦?

Web 请求中的超时似乎不被遵守

如果在 Web 项目中执行此操作,请确保Web.Config文件中 system.web/compilation 标记的 debug 属性设置为"false"。

如果是控制台应用程序等,请在"发布"模式下编译它。

在"调试"模式下会忽略许多超时。

您的代码可能正在对错误的 URL 执行 DNS 查找,这至少需要 15 秒。

根据 HttpWebRequest.Timeout 的文档

域名系统 (DNS) 查询最多可能需要 15 秒才能返回 或超时。如果您的请求包含的主机名需要 分辨率,并且您将超时设置为小于 15 秒的值,则可能会 在引发 WebException 之前需要 15 秒或更长时间,以指示 请求超时。

您可以使用 Dns.GetHostEntry 执行 DNS 查找,但默认情况下看起来需要 5 秒。