WebRequest.Timeout无法按预期工作

时间:2012-08-30 16:30:11

标签: c# asp.net

var strURL = "http://999.999.999.999"; // invalid IP-address
System.Net.WebResponse objResponse = default(System.Net.WebResponse);
System.Net.WebRequest objRequest = default(System.Net.WebRequest);

objRequest = System.Net.HttpWebRequest.Create(strURL);
objRequest.Timeout = 100;
objResponse = objRequest.GetResponse();

System.IO.StreamReader sr = new System.IO.StreamReader(objResponse.GetResponseStream());
result = sr.ReadToEnd();

通过firebug看到的超时时间是3000毫秒......不应该那样!

3 个答案:

答案 0 :(得分:2)

您的问题在于无效IP地址的预请求解决方案。所有正常请求都正常超时。根据MSDN:

  

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

是的,'999.999.999.999'不需要DNS查找,但Request对象必须混淆并花一些时间来解决它。如果IP更改为有效的URL:

var strURL = "http://www.myjunkinvalidurl.com"; 

或有效的,有效的IP:

var strURL = "http://134.170.188.221"; // microsoft.com

或有效的无效IP:

var strURL = "http://123.123.123.123"; 

所有内容都会在大约115毫秒内恢复(超时时间为100毫秒),因此WebRequest的IP地址无效解决方案必定存在问题,对我来说这个问题大约需要2300毫秒。保持IP有效,你应该没事。

答案 1 :(得分:0)

根据http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.timeout.aspx请求超时之前等待的毫秒数。默认值为100,000毫秒(100秒)。

答案 2 :(得分:0)

timeout属性设置为毫秒。通过设置为" 100"您的超时设置为0.1秒(100毫秒)。尝试设置更合理的东西,例如30秒(30,000毫秒)或者不要明确设置并保留默认的100,000毫秒。

From MSDN