Подтвердить что ты не робот

Удаленный хост закрыл соединение. Код ошибки: 0x800704CD

Я получаю сообщения об ошибках с моего сайта всякий раз, когда возникает исключение. Я получаю эту ошибку:

Удаленный хост закрыл соединение. Код ошибки: 0x800704CD

и не знаю почему. Я получаю около 30 в день. Я не могу воспроизвести ошибку, поэтому не могу отследить проблему.

Веб-сайт ASP.NET 2 работает на IIS7.

Трассировка стека:

в System.Web.Hosting.IIS7WorkerRequest.RaiseCommunicationError(Int32 результат, Boolean throwOnDisconnect) при System.Web.Hosting.IIS7WorkerRequest.ExplicitFlush() в System.Web.HttpResponse.Flush(Boolean finalFlush) в System.Web.HttpResponse.Flush() at System.Web.HttpResponse.End() at System.Web.UI.HttpResponseWrapper.System.Web.UI.IHttpResponse.End() в System.Web.UI.PageRequestManager.OnPageError(Объект отправителя, EventArgs e) в System.Web.UI.TemplateControl.OnError(EventArgs есть System.Web.UI.Page.HandleError(Exception есть System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) в System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) в System.Web.UI.Page.ProcessRequest() в System.Web.UI.Page.ProcessRequestWithNoAssert(HttpContext контекста) в System.Web.UI.Page.ProcessRequest(HttpContext контекста) в ASP.default_aspx.ProcessRequest(HttpContext контекста) в System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() в System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean & completedSynchronously)

4b9b3361

Ответ 1

Я получаю это все время. Это означает, что пользователь начал загружать файл, а затем либо не удалось, либо они отменены.

Чтобы воспроизвести исключение, попробуйте сделать это самостоятельно - однако я не знаю о каких-либо способах его предотвращения (кроме обработки только этого конкретного исключения).

Вам нужно решить, какой лучший способ продвижения вперед зависит от вашего приложения.

Ответ 2

Как упоминал м.едмондсон, "удаленный хост закрыл соединение". происходит, когда пользователь или браузер отменяет что-либо, или сетевое соединение падает и т.д. Однако необязательно должна быть загрузка файла, а только любой запрос на любой ресурс, который дает ответ клиенту. В основном ошибка означает, что ответ не может быть отправлен, потому что сервер больше не может разговаривать с клиентом (браузером).

Есть несколько шагов, которые вы можете предпринять, чтобы остановить это. Если вы вручную отправляете что-то в ответ с Response.Write, Response.Flush, возвращаете данные из метода web servivce/page или что-то подобное, то вам следует рассмотреть возможность проверки Response.IsClientConnected перед отправкой ответа. Кроме того, если ответ, вероятно, займет много времени или потребуется большая обработка на стороне сервера, вы должны периодически проверять его до тех пор, пока не будет вызван response.end. Для получения дополнительной информации об этом свойстве см. Следующее:

http://msdn.microsoft.com/en-us/library/system.web.httpresponse.isclientconnected.aspx

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

http://blog.whitesites.com/fixing-The-remote-host-closed-the-connection-The-error-code-is-0x80070057__633882307305519259_blog.htm

Также может быть интересен следующий пост:

"Удаленный хост закрыл соединение" в Response.OutputStream.Write

Ответ 3

Можно воспроизвести ошибку с помощью кода ниже:

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, чтобы продолжить цикл. После нажатия следующей итерации вы увидите исключение. Наслаждайтесь своим исключением: -)

Ответ 4

Я получал это на сайте asp.net 2.0 iis7 Windows2008. Тот же код на iis6 работал нормально. Это вызывало проблему для меня, потому что это испортило процесс входа в систему. Пользователь должен войти в систему и получить 302 по умолчанию .asxp, который будет проходить через page_load, но не до предварительного рендеринга, прежде чем iis7 отправит 302 обратно в login.aspx без файла cookie auth. Я начал играть с настройками пула приложений, и по какой-то причине "включить 32-битные приложения", похоже, исправил его. Не знаю, почему, так как этот сайт не делает ничего особенного, что должно требовать каких-либо 32-битных драйверов. У нас есть некоторые сайты, которые по-прежнему используют Access, для которых требуется 32-битный, но не наши прямые SQL-сайты, подобные этому.

Ответ 5

Я получил эту ошибку, когда я динамически читал данные с 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;
    }

Ответ 6

У меня тоже была такая же ошибка для моего обработчика изображений, которую я написал. Я получил это как 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..
        }