2011-11-27 45 views
14

Używam elmah ->Elmah.axd w moim projekcie do znajdowania błędów.
wystąpił błąd tak:Zdalny host zamknął połączenie Błąd, jak naprawić?

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) 

podczas pracy z witryny, nie widzimy tego błędu.
ale elmah wysłać ten błąd do mnie wiele razy.
co ten błąd oznacza i jak mogę to naprawić?

EDIT 1
{moja strona internetowa jest dla Downlaod plików mobilnych i kilka razy to naprawdę zajęty}
{używam Windows Server 2008 r2> zdalny dostęp}

EDIT 2 po komentarzu
niektórych informacji okien i ostrzeżenia (nie ma błędu) kłody na dziś są jak poniżej:

ostrzeżenia

Proces obsługujący pulę aplikacji ASP.NET 4.0 (Integrated) przekroczył limitów czasowych podczas zamykania. Identyfikator procesu to "6764".

ostrzeżenie

Proces roboczy '3232' 'służący pulę aplikacji ASP.NET 4.0 (zintegrowany)' nie udało się zatrzymać kanał słuchacza dla protokołu 'http' w wyznaczonego czasu. Pole danych zawiera numer błędu.

ostrzeżenie

Proces aplikacji obsługujących basen 'ASP.NET 4.0 (Integrated)' przekroczyła terminów podczas zamykania. Identyfikator procesu to "3928".

+0

Musisz dowiedzieć się, dlaczego host zdalny zamyka połączenie. –

+0

Trzeba by spojrzeć na serwer. Na przykład dziennik zdarzeń systemu Windows na serwerze; może dziennik IIS. –

+0

@ John Saunders hi i dzięki za komentarz, plz zobacz mój EDIT 2. – MoonLight

Odpowiedz

23

Widzę to bardzo często w dziennikach strony internetowej, którą zbudowałem.

AFAIK ten wyjątek oznacza, że ​​klient przerwał połączenie (przeszedł do innej strony/zamknął przeglądarkę) przed załadowaniem strony. Jeśli klient pobiera plik, ten błąd jest jeszcze bardziej prawdopodobny, ponieważ ma on więcej czasu na podjęcie decyzji o wyjściu/przejściu dalej.

Błąd jest niewidoczny dla użytkowników * - dlatego właśnie usunąłem go z dzienników Elmah.

* Witryna umożliwia tylko uwierzytelnionych użytkowników. Widzę od Elmah, która doświadczyła błędu i kiedy. Pytałem użytkowników, a żadna osoba nie zgłosiła żadnego błędu w kliencie.

+0

Cześć Neil, więc nie ma się czym martwić. Mam rację? – MoonLight

+0

tak. nie ma się o co martwić. –

+0

@NeilThompson, byłeś w stanie ukryć tego rodzaju błąd na Elmah? – eduardobr

2

Wpadłem na to dzisiaj, a dla mnie działo się to, ponieważ gniazdo przestało działać, czekając na wysłanie strony zdalnej.

W tym przykładzie wyjątkowo (lub celowo) wolny klient może spowodować wyjątek.

Wybrałem go rozwiązać poprzez zwiększenie limitu czasu odbioru na moich gniazd, ponieważ chciałem wesprzeć kilka konkretnych wolniejszych klientów, które zostały opodatkowane z wysokimi wymaganiami SSL.

0

Bit późno do tej partii, ale w przypadku pomaga innym, Response.Close() był przyczyną wyjątek w mojej sytuacji.

że widzę wyjątkiem, opisaną przez PO, przechwyconego przez ELMAH.

ten występujący w wyniku reakcji zamykania (to kod podtrzymywał pisał do strumienia wyjściowego Response)

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

Usuwanie Response.Close(); zatrzymany wyjątek wypadnięcia.

2

natknąłem tego błędu, gdy użytkownik anulowania pobierania plików. Po stronie serwera generuje wyjątek z komunikatem Zdalny host zamknął połączenie. Kod błędu to 0x800703E3. Jednak wyjątek nie ma żadnego odrębnego typu, który można obsłużyć osobno.

W odrer poradzić w ASP.NET MVC poprawnie I dodaje rejestrator wyjątek:

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

I WebExceptionLogger klasa realizacja:

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

zauważyłem, że ten specifict rodzaj błędu HRESULT = -2147023901, więc to właśnie filtruję według.

Mam nadzieję, że to pomoże.

Powiązane problemy