2012-08-29 17 views
2

최근 프로덕션 웹 사이트에 asp.net 웹 API를 게시했습니다. 프로덕션에서 하루에 한 번 처리되지 않은 예외로 인해 웹 사이트 프로세스가 재활용됩니다.web api TaskScheduler.UnobservedTaskException

처리되지 않은 예외가 발생하여 프로세스가 종료되었습니다. 응용 프로그램 ID :/LM/W3SVC/2/ROOT/oasis 프로세스 ID : 9236 예외 : System.AggregateException 메시지 : 작업의 대기 또는 예외 속성에 액세스 중 하나가 작업의 예외 ( )가 관찰되지 않았습니다. 결과적으로 관찰되지 않는 예외는 finalizer 스레드에 의해 다시 발생합니다. StackTrace : at System.Threading.Tasks.TaskExceptionHolder.Finalize() InnerException : System.Web.HttpException 메시지 : 원격 호스트가 연결을 종료했습니다. 오류 코드는 0x800704CD입니다. 스택 트레이스 : System.Web.Http.WebHost.HttpControllerHandler.EndProcessRequest에서 System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute (AT (IAsyncResult를 결과))에 System.Web.HttpApplication.ExecuteStep 때 (IExecutionStep 단계, 부울 & completedSynchronously)는

이 예외는 프로그램 코드에 있지만 웹 API 내부에서 발생하지 않을 것으로 보인다. 나는 이러한 흥분을 막아서 수많은 사람들의 세션을 파괴하므로 프로세스를 재활용해야합니다.

TaskScheduler.UnobservedTaskException += (sender, e) => 
{ 
    McpsEventLog.PostException(e.Exception, "webapicontroller"); 
    e.SetObserved(); 
}; 

그러나 이것에 대한

가 작동하려면이 코드를 넣을 수있는 곳 :

나는이 예외를 처리하는 하나 개의 방법이 사용하는 것으로 알고 있습니다. 어딘가에 웹 API 컨트롤러에? 또는 global.asax에서. 누군가가 unobserveredTaskException asp.net 웹 API를 휴식 서비스에 구현할 수있는 방법을 알고 있습니까?

답변

3

맞습니다. 처리되지 않은 예외는 웹 응용 프로그램의 컨텍스트에서 허용되지 않습니다. 해당 처리기를 설정하는 올바른 위치는 Application_Start 이벤트입니다.

UnhandledException-event도 설정해야합니다. 그러나 예외를 삼킬 수는 없습니다. 그것을 기록하십시오.

마지막으로이 주제에 대한 내 질문을보십시오. How to treat unhandled thread-exceptions in ASP.NET? 사용 가능한 대답을 얻지 못했지만 여전히 도움이 될 수 있습니다.

관련 문제