远程主机关闭了连接。 错误代码是0x800704CD

每当发生异常时,我都会收到来自我网站的错误电子邮件。 我得到这个错误:

远程主机关闭了连接。 错误代码是0x800704CD

不知道为什么。 我每天得到30分左右。 我无法重现错误,因此无法追查到问题。

网站是在IIS7上运行的ASP.NET 2。

堆栈跟踪:

在System.Web.Hosting.IIS7WorkerRequest.RaiseCommunicationError(Int32结果,布尔throwOnDisconnect)在System.Web.Hosting.IIS7WorkerRequest.ExplicitFlush()在System.Web.HttpResponse.Flush(布尔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上System.Web.UI.Page.ProcessRequestMain(布尔includeStagesBeforeAsyncPoint,布尔includeStagesAfterAsyncPoint)System.Web.UI.Page.HandleError(异常e)上的.Web.UI.TemplateControl.OnError(EventArgs e)。 Page.ProcessRequest(布尔includeStagesBeforeAsyncPoint,布尔includeStagesAfterAsyncPoint)在System.Web.UI.Page.ProcessRequest()在System.Web.UI.Page.ProcessRequestWithNoAssert(HttpContext上下文)在System.Web.UI.Page.ProcessRequest(HttpContext上下文)在System.Web.H的ASP.default_aspx.ProcessRequest(HttpContext上下文) ttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()System.Web.HttpApplication.ExecuteStep(IExecutionStep step,Boolean&completedSynchronously)


我一直得到这个。 这意味着用户开始下载文件,然后它或者失败 ,或者他们取消了它。

要重现异常请尝试自己做 - 但是我不知道任何方法来防止它(除了处理这个特定的例外)。

您需要根据您的应用程序决定最佳前进方向。


正如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中


可以用下面的代码重现错误:

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继续循环。 在下一次迭代之后,您将看到异常。 享受你的例外:-)

链接地址: http://www.djcxy.com/p/36805.html

上一篇: The remote host closed the connection. The error code is 0x800704CD

下一篇: Failed to load asmx file?