远程主机关闭连接错误,怎么修复?

时间:2011-11-27 13:52:05

标签: c# asp.net elmah windows-server-2008-r2

我正在使用elmah - > Elmah.axd在我的项目中发现错误 有这样的错误:

System.Web.HttpException: The remote host closed the connection. The error code is 0x800703E3.
Generated: Sun, 27 Nov 2011 13:06:13 GMT

System.Web.HttpUnhandledException (0x80004005): Exception of type 'System.Web.HttpUnhandledException' was thrown. ---> System.Web.HttpException (0x800703E3): The remote host closed the connection. The error code is 0x800703E3.
   at 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.HttpWriter.TransmitFile(String filename, Int64 offset, Int64 size, Boolean isImpersonating, Boolean supportsLongTransmitFile)
   at System.Web.HttpResponse.TransmitFile(String filename, Int64 offset, Int64 length)
   at SalarSoft.Utility.SP1.ResumeDownload.ProcessDownload(String fileName, String headerFileName)
   at NiceFileExplorer.en.Download.DownloadFile_SalarSoft(String fileName)
   at NiceFileExplorer.en.Download.GoForDownloadFile(String filepath)
   at NiceFileExplorer.en.Download.MainCodes()
   at System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e)
   at System.Web.UI.Control.LoadRecursive()
   at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
   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.ProcessRequest(HttpContext context)
   at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

在使用网站时,我们没有看到此错误 但是elmah多次向我发送这个错误 这个错误意味着什么,我该如何解决?

编辑1
{我的网站是用于下载移动文件,有时候它真的很忙} {我正在使用Windows Server 2008 r2->远程访问}

评论后编辑2
今天的一些Windows信息和警告(没有错误)日志如下所示:

警告

  

超出了为应用程序池“ASP.NET 4.0(集成)”提供服务的进程   关闭期间的时间限制。进程ID为'6764'。

警告

  

为应用程序池'ASP.NET 4.0提供服务的进程'3232'   (集成)'未能停止协议'http'的监听器通道   分配的时间。数据字段包含错误编号。

警告

  

超出了为应用程序池“ASP.NET 4.0(集成)”提供服务的进程   关闭期间的时间限制。流程ID为'3928'。

5 个答案:

答案 0 :(得分:30)

我在我建立的网站的日志中看到了很多。

AFAIK该异常意味着客户端在页面加载完成之前断开了连接(转到另一个页面/关闭了浏览器)。如果客户端正在下载文件,则更有可能出现此错误,因为他们有更多时间决定退出/继续。

用户看不到错误* - 所以我刚从Elmah日志中删除了它。

*该网站仅允许经过身份验证的用户。我可以从Elmah身上看到谁经历过错误以及什么时候。我已经询问了用户,并且没有一个人报告在客户端遇到此错误。

答案 1 :(得分:4)

当用户取消文件下载时,我遇到了这个错误。在服务器端,它产生一个带有消息的异常。远程主机关闭了连接。错误代码是0x800703E3 。但是,该异常没有任何可以单独处理的不同类型。

为了在ASP.NET MVC中正确处理它,我添加了一个异常记录器:

public static class RegisterFilters
{
    public static void Execute(HttpConfiguration configuration)
    {
        configuration.Services.Add(typeof(IExceptionLogger), new WebExceptionLogger());
    }
}

WebExceptionLogger类实现:

public class WebExceptionLogger : ExceptionLogger
{
    private const int RequestCancelledByUserExceptionCode = -2147023901;

    public override void Log(ExceptionLoggerContext context)
    {
        var dependencyScope = context.Request.GetDependencyScope();
        var loggerFactory = dependencyScope.GetService(typeof(ILoggerFactory)) as ILoggerFactory;
        if (loggerFactory == null)
        {
            throw new IoCResolutionException<ILoggerFactory>();
        }

        var logger = loggerFactory.GetTechnicalLogger<WebExceptionLogger>();
        if (context.Exception.HResult == RequestCancelledByUserExceptionCode)
        {
            logger.Info($"Request to url {context.Request.RequestUri} was cancelled by user.");
        }
        else
        {
            logger.Error("An unhandled exception has occured", context.Exception);
        }
    }
}

我注意到这个特定的错误类型有HResult = -2147023901,所以这就是我要过滤的。

希望这有帮助。

答案 2 :(得分:3)

今天我碰到了这个,对我来说,这是因为套接字超时等待远程端发送。

在此示例中,极端(或故意)慢客户端可能会导致异常。

我选择通过增加套接字上的接收超时来解决它,因为我想支持一些特殊的较慢的客户端,这些客户端的SSL要求很高。

答案 3 :(得分:0)

这个派对迟到了,但万一它帮助了其他人,Response.Close()在我的情况下引起了异常。

我看到了由El描述的由OP描述的例外。

这是由于关闭响应而发生的(我支持的代码是写入响应输出流):

Response.Flush();
Response.Close();
Response.End();

删除Response.Close();会停止抛出异常。

答案 4 :(得分:0)

我在矿山遇到了这个问题 / socket_error_the_remote_host_closed_the_connection / 您必须退出并转到 C:\ Users \您的姓名\ AppData \ Local \ minergate.ethash-minergate 然后删除该文件夹中的所有文件。 好路