WebRequest.Timeout не работает должным образом
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 ответа
Ваша проблема заключается в разрешении неверного 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 мс), поэтому должна быть проблема с неправильным разрешением IP-адреса WebRequest, которое для меня возвращается примерно через 2300 мс. Сохраняйте действительный IP-адрес, и все будет в порядке.
Свойство timeout должно быть установлено в миллисекундах. Установив "100", вы установите тайм-аут на 0,1 секунды (100 миллисекунд). Попробуйте установить что-то более разумное, например, 30 секунд (30 000 миллисекунд), или просто не устанавливайте явно и оставьте значение по умолчанию 100 000 мс.
Согласно http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.timeout.aspx Количество миллисекунд ожидания до истечения времени ожидания запроса. Значение по умолчанию составляет 100000 миллисекунд (100 секунд).