Удаленный узел закрыл соединение. Код ошибки 0x800704CD
Я получаю сообщения об ошибках с моего сайта всякий раз, когда возникает исключение. Я получаю эту ошибку:
удаленный хост закрыл соединение. Код ошибки 0x800704CD
и не знаю почему. Я получаю около 30 в день. Я не могу воспроизвести ошибку, поэтому не могу отследить проблему.
сайт есть ASP.NET 2 работает на IIS7.
трассировка стека:
at
Система.Сеть.Размещающий.IIS7WorkerRequest.RaiseCommunicationError(Int32
результат, Boolean throwOnDisconnect) at
Система.Сеть.Размещающий.IIS7WorkerRequest.ExplicitFlush()
на
Система.Сеть.HttpResponse.Флаш(Логическое
finalFlush) на
Система.Сеть.HttpResponse.Врезная() на
Система.Сеть.HttpResponse.Конец() на
Система.Сеть.ПОЛЬЗОВАТЕЛЬСКИЙ ИНТЕРФЕЙС.HttpResponseWrapper.Система.Сеть.ПОЛЬЗОВАТЕЛЬСКИЙ ИНТЕРФЕЙС.IHttpResponse.Конец()
на
Система.Сеть.ПОЛЬЗОВАТЕЛЬСКИЙ ИНТЕРФЕЙС.PageRequestManager.OnPageError (Объект
отправитель, EventArgs e) at
Система.Сеть.ПОЛЬЗОВАТЕЛЬСКИЙ ИНТЕРФЕЙС.TemplateControl.OnError(EventArgs
д) При
Система.Сеть.ПОЛЬЗОВАТЕЛЬСКИЙ ИНТЕРФЕЙС.Страница.Handleerror С(За Исключением
д) При
Система.Сеть.ПОЛЬЗОВАТЕЛЬСКИЙ ИНТЕРФЕЙС.Страница.ProcessRequestMain (Boolean
includeStagesBeforeAsyncPoint, Boolean
includeStagesAfterAsyncPoint) на
Система.Сеть.ПОЛЬЗОВАТЕЛЬСКИЙ ИНТЕРФЕЙС.Страница.ProcessRequest (Boolean
includeStagesBeforeAsyncPoint, Boolean
includeStagesAfterAsyncPoint) на
Система.Сеть.ПОЛЬЗОВАТЕЛЬСКИЙ ИНТЕРФЕЙС.Страница.ProcessRequest () at
Система.Сеть.ПОЛЬЗОВАТЕЛЬСКИЙ ИНТЕРФЕЙС.Страница.ProcessRequestWithNoAssert(HttpContext
контекст) на
Система.Сеть.ПОЛЬЗОВАТЕЛЬСКИЙ ИНТЕРФЕЙС.Страница.ProcessRequest(HttpContext
контекст) на
ГАДЮКА.default_aspx.ProcessRequest(HttpContext
контекст) на
Система.Сеть.HttpApplication.CallHandlerExecutionStep.Система.Сеть.HttpApplication.IExecutionStep.Выполнять()
на
Система.Сеть.HttpApplication.ExecuteStep(IExecutionStep
step, Boolean& completedSynchronously)
6 ответов:
Я получаю это все время. Это означает, что пользователь начал загружать файл, а затем он либо ошибка, или отменен его.
чтобы воспроизвести исключение, попробуйте сделать это самостоятельно - однако я не знаю о каких-либо способах его предотвращения (за исключением обработки только этого конкретного исключения).
вы должны решить, что лучший путь вперед-в зависимости от вашего приложения.
Как м. Эдмондсон упомянул, "удаленный хост закрыл соединение."происходит, когда пользователь или браузер отменяет что-то, или сетевое соединение падает и т. д. Однако это не обязательно должна быть загрузка файла, просто любой запрос на любой ресурс, который приводит к ответу клиенту. В основном ошибка означает, что ответ не может быть отправлен, потому что сервер больше не может разговаривать с клиентом(браузером).
есть несколько шагов что вы можете взять, чтобы остановить это происходит. Если вы вручную отправляете что-то в ответ с Ответ.письменный ответ.Flush, возвращая данные из веб-метода servivce / page или что-то подобное, тогда вы должны рассмотреть возможность проверки ответа.IsClientConnected перед отправкой ответа. Кроме того, если ответ, вероятно, займет много времени или требуется много обработки на стороне сервера, вы должны периодически проверять это до ответа.конец, если позовут. См. подробная информация об этом объекте недвижимости:
http://msdn.microsoft.com/en-us/library/system.web.httpresponse.isclientconnected.aspx
альтернативно, что я считаю наиболее вероятным в вашем случае, ошибка вызвана чем-то внутри структуры. Следующая ссылка может быть: использование:
следующая запись переполнения стека также может представлять интерес:
"удаленный хост закрыл соединение" в ответ.Выходной поток.Пиши
можно воспроизвести ошибку с кодом ниже:
public ActionResult ClosingTheConnectionAction(){ try { //we need to set buffer to false to //make sure data is written in chunks Response.Buffer = false; var someText = "Some text here to make things happen ;-)"; var content = GetBytes( someText ); for(var i=0; i < 100; i++) { Response.OutputStream.Write(content, 0, content.Length); } return View(); } catch(HttpException hex) { if (hex.Message.StartsWith("The remote host closed the connection. The error code is 0x800704CD.")) { //react on remote host closed the connection exception. var msg = hex.Message; } } catch(Exception somethingElseHappened) { //handle it with some other code } return View(); }теперь запустить сайт в режиме отладки. Поместите точку останова в цикл, который записывает в выходной поток. Перейдите к этому методу действий и после первой итерации закройте вкладку браузера. Нажмите F10, чтобы продолжить цикл. После того, как он попал в следующий раз вы увидите исключение. Наслаждайтесь вашим исключением : -)
я получил эту ошибку, когда я динамически считывать данные из
WebRequestи никогда не закрывалResponse.protected System.IO.Stream GetStream(string url) { try { System.IO.Stream stream = null; var request = System.Net.WebRequest.Create(url); var response = request.GetResponse(); if (response != null) { stream = response.GetResponseStream(); // I never closed the response thus resulting in the error response.Close(); } response = null; request = null; return stream; } catch (Exception) { } return null; }
Я получал это на Ан asp.net 2.0 IIS7 Windows2008 сайт. Тот же код на iis6 работал нормально. Это вызывает проблемы для меня, потому что это портит процесс входа в систему. Пользователь будет войти и получить 302 по умолчанию.asxp, который будет проходить через page_load, но не до предварительного рендеринга, прежде чем iis7 отправит 302 обратно в login.аспн без авторизации куки. Я начал играть с настройками пула приложений, и по какой-то причине "включить 32-битные приложения", похоже, исправил это. Не знаю, почему, поскольку этот сайт не делает ничего особенного, что должно требовать каких-либо 32-битных драйверов. У нас есть некоторые сайты, которые все еще используют доступ, требующий 32bit, но не наши прямые сайты SQL, такие как этот.
Я тоже получил эту же ошибку на моем обработчике изображений, который я написал. Я получил его как 30 раз в день на сайте с интенсивным трафиком, удалось воспроизвести его также. Вы получаете это, когда пользователь отменяет запрос (закрывает страницу или его подключение к интернету прерывается, например), в моем случае в следующей строке:
myContext.Response.OutputStream.Write(buffer, 0, bytesRead);Я не могу придумать никакого способа предотвратить это, но, возможно, вы можете правильно справиться с этим. Например:
try { … myContext.Response.OutputStream.Write(buffer, 0, bytesRead); … }catch (HttpException ex) { if (ex.Message.StartsWith("The remote host closed the connection.")) ;//do nothing else //handle other errors } catch (Exception e) { //handle other errors } finally {//close streams etc.. }
Comments