Web请求中的超时似乎并未得到尊重

时间:2013-01-25 20:22:33

标签: c# timeout

如果timint输出超过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时似乎没有超时,它只是持续进行很长时间(似乎是几分钟)。

这是什么?

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

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

根据HttpWebRequest.Timeout

的文件
  

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

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