Удаленный хост закрыл соединение.Код ошибки 0x800704CD - PullRequest
75 голосов
/ 06 апреля 2011

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

Удаленный хост закрыл соединение. Код ошибки 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 () в System.Web.HttpResponse.End () в 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 шаг, логическое и завершено синхронно)

Ответы [ 6 ]

57 голосов
/ 06 апреля 2011

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

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

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

27 голосов
/ 08 марта 2012

Как упомянул m.edmondson , «Удаленный хост закрыл соединение». происходит, когда пользователь или браузер отменяет что-то , или сетевое соединение прерывается и т. д. Однако это не обязательно должна быть загрузка файла, просто любой запрос любого ресурса, который приводит к ответу клиенту. По сути, ошибка означает, что ответ не может быть отправлен, поскольку сервер больше не может общаться с клиентом (браузером).

Существует ряд шагов, которые вы можете предпринять, чтобы остановить это. Если вы вручную отправляете что-то в ответе с помощью Response.Write, Response.Flush, возвращая данные из метода веб-службы / страницы или чего-то подобного, то вам следует рассмотреть возможность проверки 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

9 голосов
/ 26 марта 2015

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

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

2 голосов
/ 26 февраля 2013

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

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

1 голос
/ 04 ноября 2013

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