1

如果 timint out 需要超过 10 秒,我希望我的 http get 请求失败。

我有这个:

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 时,它似乎并没有超时,它只是持续了很长时间(似乎是几分钟)。

为什么是这样?

4

2 回答 2

2

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

如果是控制台应用程序等,请以“发布”模式编译。

在“调试”模式下会忽略很多超时。

于 2013-01-25T20:26:32.787 回答
1

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

根据HttpWebRequest.Timeout的文档

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

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

于 2013-01-25T20:26:56.533 回答