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毫秒......不应该那样!
答案 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毫秒。