HttpWebRequest не возвращается, закрытие соединения - PullRequest
1 голос
/ 03 марта 2009

У меня есть веб-приложение, которое опрашивает веб-сервис на другом сервере. Сервер расположен в той же сети, и на него ссылается внутренний IP-адрес, работающий через порт 8080.

Каждые 15 секунд отправляется запрос, который получает xml-ответ с информацией о задании. В 95% случаев это работает хорошо, однако в случайное время запрос к серверу становится нулевым и выдает «ответ, принудительно закрытый удаленным хостом».

Исследуя эту проблему, другие установили KeepAlive = false. Это не решило проблему. Веб-сервер работает под управлением .NET 3.5 SP1.

Uri serverPath = new Uri(_Url);

// create the request and set the login credentials
_Req = (HttpWebRequest)WebRequest.Create(serverPath);
_Req.KeepAlive = false;
_Req.Credentials = new NetworkCredential(username, password);
_Req.Method = this._Method;

Позвоните на ответ:

HttpWebResponse response = (HttpWebResponse)request.GetResponse();
_ResponseStream = response.GetResponseStream();

Метод для этого - GET. Я попытался изменить время ожидания, но значение по умолчанию достаточно велико, чтобы учесть это.

Другой запрос, который мы выполняем, - это POST для отправки данных на сервер, и мы тоже получаем случайную проблему. На это не влияют брандмауэры, и мы исключили антивирусный сканер. Будем благодарны за любые идеи, которые помогут решить эту проблему!

Ответы [ 3 ]

5 голосов
/ 03 марта 2009

Вы закрываете поток ответов и утилизируете сам ответ? Это самая частая причина «зависаний» в WebRequest - существует ограничение на количество соединений, которые вы можете открыть к одной машине одновременно. В конечном итоге, GC завершит соединения, но если вы правильно настроите их, это не проблема.

0 голосов
/ 18 августа 2010

Установите для свойства тайм-аута объекта FtpWebRequest максимальное значение. Я попробовал его с файлом 4 ГБ, и он отлично работает.

0 голосов
/ 03 марта 2009

Я бы не стал исключать проблемы с сетью в качестве возможной причины проблем. Вы запустили эхо-запрос к вашему серверу, чтобы узнать, были ли отброшены пакеты, которые соответствуют тому же времени, что и ваши неудачные запросы?

...