У меня есть ситуация, сводящая меня с ума, и нет никакой реальной информации в Интернете, которая помогает.HttpWebRequest Aborting After Callling GetResponse()
Я автоматизирую ручной процесс для загрузки файла. Я на самом деле написал этот код, как 3 года назад, и он работал без сбоев в течение года, теперь он прерывается с перерывами. Рассматривая трафик Fiddler для моих запросов и запросов, только что сделанных из браузера, единственные различия, которые я вижу, это то, что в скрипаче я получаю этот красный круг с строкой через него дважды во время моих автоматических вызовов.
Мои исследования показывают, что этот значок означает, что клиент прервал сеанс - чего я не делал. Я передаю тот же объект CookieContainer с каждым запросом. Я не знаю, почему это происходит, но если просмотреть свойства вошедшей линии в Скрипач он говорит, что это для моих автоматических запросов:
SESSION STATE: Aborted.
...
X-ABORTED-WHEN: SendingResponse
...
== TIMING INFO ============
ClientConnected: 16:25:58.563
ClientBeginRequest: 16:25:58.566
GotRequestHeaders: 16:25:58.567
ClientDoneRequest: 16:25:58.567
Determine Gateway: 0ms
DNS Lookup: 0ms
TCP/IP Connect: 0ms
HTTPS Handshake: 0ms
ServerConnected: 16:25:58.207
FiddlerBeginRequest: 16:25:58.567
ServerGotRequest: 16:25:58.567
ServerBeginResponse: 16:25:58.922
GotResponseHeaders: 16:25:58.922
ServerDoneResponse: 16:25:59.268
ClientBeginResponse: 16:25:59.268
ClientDoneResponse: 16:25:59.268
Той же линия из журнала я получаю в браузере выглядит следующим образом :
SESSION STATE: Done.
...
ClientConnected: 10:33:09.347
ClientBeginRequest: 10:33:11.982
GotRequestHeaders: 10:33:11.982
ClientDoneRequest: 10:33:11.982
Determine Gateway: 0ms
DNS Lookup: 0ms
TCP/IP Connect: 0ms
HTTPS Handshake: 0ms
ServerConnected: 10:33:08.050
FiddlerBeginRequest: 10:33:11.982
ServerGotRequest: 10:33:11.982
ServerBeginResponse: 10:33:12.337
GotResponseHeaders: 10:33:12.337
ServerDoneResponse: 10:33:12.511
ClientBeginResponse: 10:33:12.511
ClientDoneResponse: 10:33:12.514
Так что «сделано» против «Прервано». Я никогда не вызывал Abort по просьбе, и я не получаю никаких исключений. Вот мой код, где происходит преждевременное прекращение:
using (WebResponse httpResponse = httpRequest.GetResponse())
{
if (!httpResponse.ResponseUri.AbsoluteUri.Equals(string.Format("{0}main.htm", url), StringComparison.CurrentCultureIgnoreCase))
{
throw new Exception("Log in failed. Check the Username and Password information in the Setting table.");
}
httpResponse.Close();
}
Я попытался убирая «с помощью» (хотя это рекомендуется) и «Закрыть» (также рекомендуется) и по-прежнему получает прервана.
Я ценю это
Если вам нужны только заголовки (т. Е. Вам не нужен поток ответов), возможно, вы должны сделать запрос «ГОЛОВА». –