2012-03-06 1 views
3

asp.net mvc 응용 프로그램을 개발 중입니다. 아래 내 응용 프로그램의 아키텍처 :Elmah를 UnobservedTaskException과 함께 사용하는 방법

  1. ServiceLayer // 레이어를 데이터베이스에 액세스하기위한 DBAccessLayer // 층을 연결하는 1
  2. WebLayer // 웹 UI 층
(3)

예외를 포함하여 모든 응용 프로그램 예외를 TaskScheduler.UnobservedTaskException 이벤트에 기록하려고합니다.

protected void Application_Start() 
{ 
    ... 
    TaskScheduler.UnobservedTaskException += (object sender, UnobservedTaskExceptionEventArgs excArgs) => 
    { 
     ErrorSignal.FromCurrentContext().Raise(excArgs.Exception);  
     excArgs.SetObserved(); 
    }; 
} 

을하지만 UnobservedTaskException 이벤트가 발사 될 때, 응용 프로그램은 다음과 같이 예외로 추락 :

나는 다음과 같이 할 테스트했습니다 또한

System.ArgumentNullException was unhandled 
     Message=Value cannot be null. 
     Parameter name: context 
     Source=Elmah 
     ParamName=context 
    StackTrace: 
     at Elmah.ErrorSignal.FromContext(HttpContext context) in c:\builds\ELMAH\src\Elmah\ErrorSignal.cs:line 67 
     at MyMvcApplication.<Application_Start>b__0(Object sender, UnobservedTaskExceptionEventArgs excArgs) in ...\Global.asax.cs:line 82 
     at System.Threading.Tasks.TaskScheduler.PublishUnobservedTaskException(Object sender, UnobservedTaskExceptionEventArgs ueea) 
     at System.Threading.Tasks.TaskExceptionHolder.Finalize() 

, 나는 UnobservedTaskException 이벤트를 넣어 WebLayer의 global.asax.cs 파일에서 DBAccessLayer 및 ServiceLayer가 관찰되지 않는 예외가있을 때 해고 할 수 있습니까?

감사합니다.

+0

를 사용할 수 있지만 우리는 현재 HttpContext를 얻을하려고 우리의 애플 리케이션의 코드가 있습니다. 성공하면 Elmah를 통해 기록하고, 그렇지 않으면 이메일을 생성합니다 ... – Jon

답변

0

예약 된 작업이 HTTP 요청의 일부로 실행되고 있지 않기 때문에 처리기가 실행되는 것처럼 보입니다. HttpContext가 없습니다. 대신

ErrorSignal.FromCurrentContext().Raise 

를 사용하는 직접 귀하의 질문에 대답하지 않습니다

ErrorLog.GetDefault(null).Log 
+0

이 질문이 얼마나 오래되었는지 깨달았습니다 ... – PabloC