원격 호스트가 연결을 종료했습니다. 오류 코드는 0x800704CD입니다.


81

예외가 발생할 때마다 내 웹 사이트에서 오류 이메일을받습니다. 이 오류가 발생합니다.

원격 호스트가 연결을 종료했습니다. 오류 코드는 0x800704CD입니다.

이유를 모릅니다. 나는 하루에 약 30 개를 받는다. 오류를 재현 할 수 없으므로 문제를 추적 할 수 없습니다.

웹 사이트는 IIS7에서 실행되는 ASP.NET 2입니다.

스택 추적 :

System.Web.Hosting.IIS7WorkerRequest.RaiseCommunicationError (Int32 result, Boolean throwOnDisconnect) at System.Web.Hosting.IIS7WorkerRequest.ExplicitFlush () at System.Web.HttpResponse.Flush (Boolean finalFlush) at System.Web.HttpResponse.Flush ( ) at System.Web.HttpResponse.End () at System.Web.UI.HttpResponseWrapper.System.Web.UI.IHttpResponse.End () at System.Web.UI.PageRequestManager.OnPageError (Object sender, EventArgs e) at System .Web.UI.TemplateControl.OnError (EventArgs e) at System.Web.UI.Page.HandleError (Exception e) at System.Web.UI.Page.ProcessRequestMain (Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) at System.Web.UI. Page.ProcessRequest (Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) at System.Web.UI.Page.ProcessRequest () at System.Web.UI.Page.ProcessRequestWithNoAssert (HttpContext context) at System.Web.UI.Page.ProcessRequest (HttpContext context) at ASP.default_aspx.ProcessRequest (HttpContext context) at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication. System.Web.HttpApplication.ExecuteStep (IExecutionStep 단계, Boolean & completedSynchronously)에서 IExecutionStep.Execute ()

답변:


60

나는 항상 이것을 얻는다. 이는 사용자가 파일 다운로드를 시작한 후 실패 했거나 취소 했음을 의미 합니다.

예외를 재현하려면 직접 시도해보십시오. 그러나이를 방지 할 수있는 방법이 없습니다 (이 특정 예외 처리 만 제외).

앱에 따라 최선의 방법을 결정해야합니다.


내 사이트에서 파일 다운로드를 제공하지 않습니다. 페이지 콘텐츠를 다운로드해도 문제가 발생합니까?
webnoob 2011

7
예, 스택 추적을 보는 것은 System.Web.HttpResponse.Flush()모든 종류의 응답을 의미합니다. 난 그냥 발견 한 당신이 viewstate가 매우 크고 사용자가이 예외를 일으킬 수 너무 빨리 클릭하는 문제의 루트에 도착 도움이 될 수 있습니다.
m.edmondson 2011

이로 인해 사용자에게 오류가 발생하는지 아니면 숨겨진 오류가 발생하는지 알고 있습니까?
webnoob 2011

2
이것에 대한 내 자신의 조사는 사용자가 평범한 것을 보지 못한다는 것을 보여줍니다. 고객 / 클라이언트로부터 불만이 있습니까?
m.edmondson 2011

2
아뇨. 도와 주셔서 감사합니다.
webnoob 2011

30

마찬가지로 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의 "원격 호스트가 연결을 닫았습니다."


2
에 대한 큰 업 Response.IsClientConnected!
Stumblor

10

아래 코드로 오류를 재현 할 수 있습니다.

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

나는 이것을 asp.net 2.0 iis7 Windows2008 사이트에서 얻었습니다. iis6의 동일한 코드가 제대로 작동했습니다. 로그인 프로세스를 엉망으로 만들기 때문에 문제가 발생했습니다. 사용자는 로그인하여 default.asxp에 302를 가져옵니다. 이는 page_load를 통해 가져 오지만 iis7이 인증 쿠키없이 302를 login.aspx로 다시 보내기 전에는 사전 렌더링하지 않습니다. 저는 앱 풀 설정으로 플레이하기 시작했는데 어떤 이유로 '32 비트 애플리케이션 활성화 '가 문제를 해결 한 것 같습니다. 이 사이트는 32 비트 드라이버가 필요한 특별한 작업을 수행하지 않기 때문에 이유를 모릅니다. 32 비트가 필요한 Access를 사용하는 사이트가 있지만 이와 같은 SQL 사이트는 그렇지 않습니다.


32 비트 응용 프로그램을 활성화하면 문제가 해결되었습니다. 감사 !
Praneet Nadkar

32 비트 응용 프로그램을 활성화하면 응용 프로그램의 메모리 사용량이 줄어들 수 있으며, 이는 서버에 메모리 문제가 있음을 암시 할 수 있습니다. 이것은 또한 완전히 다른 문제가 될 수 있습니다.
jahu

2

나는 동적으로 데이터를 읽을 때이 오류를 가지고 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;
    }

1

나도 내가 작성한 이미지 핸들러에서 이와 동일한 오류가 발생했습니다. 교통량이 많은 현장에서 하루에 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..
        }

4
이것은 서버 문화가 영어가 아닌 경우 (메시지가 다른 언어로되어 있기 때문에) 비참하게 실패합니다. ErrorCode예외의 속성을 사용 하십시오 (2147943629, HRESULT 0x800704CD와 같아야 함).
Ronald

4
수정 : ErrorCodeHRESULT 0x800704CD의 경우 -2147023667.
Ronald

나는 영어가 아닌 서버 문화를 사용한 적이 없지만 문제가 있습니다. 또한 제안한 것과 같은 다른 서버 문화를 처리하기 위해 한 줄의 코드를 변경할 수 있습니다
Robert Benyi
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.