Удаленный хост закрыл ошибку подключения, как исправить?

Я использую 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
{Мой веб-сайт предназначен для мобильных файлов downlaod, а иногда он действительно занят}
{Я использую Windows Server 2008 r2- > удаленный доступ}

EDIT 2 после комментария
некоторые данные о Windows и предупреждения (нет ошибок), журналы на сегодняшний день выглядят следующим образом:

предупреждение

Превышен пул приложений, обслуживающий процесс "ASP.NET 4.0 (Integrated)" при закрытии. Идентификатор процесса был "6764".

предупреждение

Рабочий процесс '3232', обслуживающий пул приложений 'ASP.NET 4.0 (Integrated) 'не удалось остановить канал прослушивателя для протокола' http 'в отведенное время. Поле данных содержит номер ошибки.

предупреждение

Превышен пул приложений, обслуживающий процесс "ASP.NET 4.0 (Integrated)" при закрытии. Идентификатор процесса был "3928".

Ответы

Ответ 1

Я вижу это в журналах веб-сайта, который я построил.

AFAIK это исключение означает, что клиент сломал соединение (перешел на другую страницу/закрыл браузер) до того, как страница закончила загрузку. Если клиент загружает файл, эта ошибка еще более вероятна, так как у них больше времени, чтобы решить выйти/перейти.

Ошибка не видна пользователям * - поэтому я только что удалил ее из журналов Elmah.

* Сайт допускает только аутентифицированных пользователей. Я могу видеть от Эльмы, который испытал ошибку и когда. Я спросил пользователей, и ни один человек никогда не сообщал об этой ошибке в клиенте.

Ответ 2

Я столкнулся с этим сегодня, и для меня это происходило, потому что сокет был рассчитан на ожидание отправки удаленной стороны.

В этом примере чрезвычайно (или преднамеренно) медленный клиент может вызвать исключение.

Я решил разрешить это, увеличив время ожидания приема в своих сокетах, так как я хотел поддержать несколько конкретных более медленных клиентов, которым облагались высокие требования SSL.

Ответ 3

Я столкнулся с этой ошибкой, когда пользователь отменил загрузку файла. На стороне сервера он создает исключение с сообщением. Удаленный хост закрыл соединение. Код ошибки: 0x800703E3. Однако исключение не имеет какого-либо отдельного типа, который можно обрабатывать отдельно.

В odrer для обработки его в 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, поэтому это то, что я фильтрую.

Надеюсь, что это поможет.

Ответ 4

Бит опоздал на эту сторону, но в случае, если это помогает другим, Response.Close() вызывает исключение в моей ситуации.

Я видел исключение, описанное OP, захваченное Эльмой.

Это произошло из-за закрытия ответа (код, который я поддерживал, записывал в выходной поток Response):

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

Удаление Response.Close(); остановило исключение.