リモートホストが接続を閉じました。エラーコードは0x800704CDです


81

例外が発生するたびに、Webサイトからエラーメールが届きます。このエラーが発生します:

リモートホストが接続を閉じました。エラーコードは0x800704CDです

理由はわかりません。私は1日約30を取得します。エラーも再現できないため、問題を追跡できません。

Webサイトは、IIS7で実行されているASP.NET2です。

スタックトレース:

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)atSystem.Web.UI。 System.Web.UI.Page.ProcessRequest()のPage.ProcessRequest(Boolean includeStagesBeforeAsyncPoint、Boolean includeStagesAfterAsyncPoint)。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 step、Boolean&completedSynchronously)のIExecutionStep.Execute()

回答:


60

私はいつもこれを手に入れます。これは、ユーザーがファイルのダウンロードを開始した後、失敗したか、キャンセルしたことを意味しますことを意味します。

例外を再現するには、これを自分で実行してみてください。ただし、これを防ぐ方法はわかりません(この特定の例外のみを処理する場合を除く)。

アプリに応じて、前進するための最善の方法を決定する必要があります。


私のサイトではファイルのダウンロードを提供していません。ページコンテンツをダウンロードすると、それも発生しますか?
webnoob 2011

7
はい、そうSystem.Web.HttpResponse.Flush()です。スタックトレースを見ると、あらゆる種類の応答が意味されます。私はちょうど見つけたこれを、それはあなたがビューステートが非常に大きく、ユーザーがこの例外を引き起こす可能性があまりにも速いクリックしている問題のルートに得るのを助けることが、。
m.edmondson 2011

これがユーザーにエラーを引き起こすのか、それとも単に隠されたエラーを引き起こすのか知っていますか?
webnoob 2011

2
私自身がこれを調査したところ、ユーザーには異常なことは何も見られないことがわかりました。顧客/クライアントからの苦情はありますか?
m.edmondson 2011

2
何もなし。助けてくれてありがとう。
webnoob 2011

30

以下のようm.edmondsonが述べた、「リモートホストが接続を閉じました。」ユーザーまたはブラウザが何かをキャンセルしたり、ネットワーク接続が切断されたりした場合に発生します。必ずしもファイルのダウンロードである必要はありませんが、クライアントへの応答につながるリソースの要求だけです。基本的に、エラーは、サーバーがクライアント(ブラウザー)と通信できなくなったために応答を送信できなかったことを意味します。

それが起こるのを止めるためにあなたが取ることができるいくつかのステップがあります。Response.Write、Response.Flushを使用して応答で何かを手動で送信する場合、Webサービス/ページメソッドなどからデータを返す場合は、応答を送信する前に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
つまずき2016年

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();
} 

次に、Webサイトをデバッグモードで実行します。出力ストリームに書き込むループにブレークポイントを設定します。そのアクションメソッドに移動し、最初の反復が通過した後、ブラウザーのタブを閉じます。F10を押して、ループを続行します。次の反復にヒットすると、例外が表示されます。あなたの例外をお楽しみください:-)


2

私はこれをasp.net2.0 iis7Windows2008サイトで入手していました。iis6の同じコードは正常に機能しました。ログインプロセスを台無しにしていたので、それは私にとって問題を引き起こしていました。ユーザーはログインして302をdefault.asxpに取得します。これはpage_loadを通過しますが、iis7が認証Cookieなしで302をlogin.aspxに送り返す前に事前レンダリングするほどではありません。アプリプールの設定を試してみましたが、何らかの理由で「32ビットアプリケーションを有効にする」で修正されたようです。このサイトは32ビットドライバを必要とする特別なことを何もしていないので、理由はわかりません。32ビットを必要とするAccessをまだ使用しているサイトがいくつかありますが、このようなストレートSQLサイトはありません。


32ビットアプリケーションを有効にすると、私も修正されました。ありがとう!
PraneetNadkar19年

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

私も自分が書いたのと同じエラーを画像ハンドラーで受け取りました。交通量の多い現場で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に等しいはずです)。
ロナルド

4
訂正:ErrorCodeHRESULT0x800704CDのは-2147023667です。
ロナルド

英語以外のサーバーカルチャを使用したことはありませんが、問題が発生しているようです。それでもなお、提案したようなさまざまなサーバー
カルチャ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.