我正在開發一個asp.net mvc應用程序。我的應用程序,如下所述結構:如何使Elmah使用UnobservedTaskException工作
- 用於訪問數據庫
- 一個ServiceLayer //層DBAccessLayer //層連接1和3
- 一個WebLayer //網絡用戶界面層
我想記錄所有應用程序異常,包括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有未被發現的異常時,它可以被觸發嗎?
謝謝。
並不直接回答你的問題,但我們已經在我們的應用程序代碼,試圖獲取當前的HttpContext。如果成功,它會通過Elmah記錄,否則會生成一封電子郵件... – Jon 2012-03-06 01:20:12