Я занимаюсь разработкой приложения asp.net mvc. Архитектура моего приложения, как показано ниже:
- слой DBAccessLayer // для доступа к базе данных
- слой ServiceLayer // для соединения 1 и 3.
- слой WebLayer // Web UI
Я хочу регистрировать все исключения приложений, включая исключения в событии 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 в global.asax.cs WebLayer. Может ли оно быть запущено, когда DBAccessLayer и ServiceLayer имеют ненаблюдаемые исключения?
Спасибо.