Воспроизведение "Соединение, которое, как ожидалось, будет сохранено, было закрыто сервером".

Мы используем WebClient,.NET 3.5sp1 в приложении winforms. Для некоторых пользователей этот результат в Exception с сообщением:

"Подключенное соединение было закрыто: соединение, которое должно было быть сохранено, было закрыто сервером".

Поиск немного по сети предлагает "исправить", чтобы просто отключить http keepalive, что нам не очень интересно делать, некоторые полагают, что это может быть ошибкой в ​​библиотеках .NET и т.д.

Сообщение об ошибке указывает на наличие http-соединения keepaliv'ed, которое каким-то образом закрывается сервером (или прокси) без поддержки WebClient, обнаружившего его правильно.

Мы собираемся поймать этот конкретный случай и просто попробуем запрос еще раз. Однако мы не можем воспроизвести это исключение. Так.

  • Как мы можем правильно уловить случай, который дает вышеприведенное сообщение об ошибке.

    catch (WebException ex) {   if (ex.Message == "Подключенное соединение было закрыто: соединение, которое должно было оставаться в живых, было закрыто сервером" ) {...}

    запахи.. плохо.

  • Любые советы о том, как мы можем воспроизвести вышеупомянутое исключение?

Ответ 1

WebClient обнаруживает это просто отлично. Таким образом, исключение. Вам нужно найти сервер, который плохо себя ведет. Не совсем уверен, что делать, если вы обнаружите этот сервер, возможно, вы можете отправить администратору хорошее сообщение электронной почты.

Зарегистрируйте URL-адрес сервера.

Ответ 2

Я предлагаю вам взглянуть на этот блог от Misrosoft: проблемы протокола клиента Http