Тайм-аут .NET HttpWebRequest явно игнорируется на некоторых компьютерах - PullRequest
2 голосов
/ 30 августа 2011

Мы используем объект HttpWebRequest для обмена данными между серверной и клиентской частями нашего приложения. Когда IP-адрес сервера не может быть достигнут или недействителен (что происходит, и должно произойти ), клиент либо перестает ждать через 3 секунды (это установленное мной время ожидания), либо продолжает ждать до минуты, в зависимости от того, на каком компьютере он запущен! Код следует:

HttpWebRequest webRequest = null;
WebResponse webResponse = null;
webRequest = (HttpWebRequest)WebRequest.Create(serverURL);
webRequest.Timeout = 1000 * 3; //3 seconds
webRequest.ReadWriteTimeout = webRequest.Timeout;
webRequest.AllowWriteStreamBuffering = true;
//Adding headers here; code removed
webRequest.Proxy = null;
webResponse = webRequest.GetResponse();

Следуя совету по ускорению запроса, который я нашел на этом и других веб-сайтах, я также установил свойство ReadWriteTimeout и для Proxy значение null. Хотя он корректно останавливается через 3 секунды на моем собственном компьютере и на других, которые я пробовал, на некоторых других он останавливается примерно через 40 секунд. Я повторяю, что это то, что происходит, если он пытается подключиться к неверному адресу, такому как IP, который не существует в нашей подсети, и что «Использовать правильный IP» не является приемлемым решением (Я мог бы объяснить, почему, но я думаю, что это было бы не по теме). Если он подключается к существующему IP-адресу, обмен данными происходит быстро, как и должно быть.

Кто-нибудь видел нечто подобное?

1 Ответ

0 голосов
/ 30 августа 2011

Я понятия не имею, почему это может произойти, но я думаю, что вы можете использовать ping в качестве обходного пути, если у вас есть IP (не доменное имя):

Console.WriteLine(new Ping().Send(IPAddress.Parse(ipAddress)).Status);
...