2012-08-30 156 views
1
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(); 

我看到萤火虫的超时时间为3000毫秒......不应该那样!WebRequest.Timeout未按预期工作

+0

为什么不显示Firebug的屏幕截图?你看到了,但没有人。 –

回答

0

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

+0

他将其设置为100毫秒:'objRequest.Timeout = 100;' – Femaref

+0

复制粘贴从http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.timeout.aspx – Guffa

+0

那并不是”解释为什么它不会中止请求....有效的请求只需要90毫秒,所以它不是延迟问题。 – user131008

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有效,你应该没问题。

0

timeout属性将被设置为毫秒。通过设置为“100”,您的超时设置为0.1秒(100毫秒)。尝试设置为更合理的设置,例如30秒(30,000毫秒),或者不显式设置并保留为默认100,000毫秒。

From MSDN