Глава.20 .Исключения.и.управление.состоянием
метод, который нужно вызывать каждый раз, когда в каком-либо потоке возникает
необработанное исключение.
К сожалению, в разных моделях приложений Microsoft используются разные
способы получения доступа к информации необработанных исключений. Можно
использовать следующие члены FCL (подробнее см. документацию):
Для многих приложений — событие
UnhandledException
класса
System.App-
Domain
. Приложения Windows Store и Microsoft Silverlight не могут обращаться
к этому событию.
Для приложений Windows Store — события
UnhandledException
класса
Win-
dows.UI.Xaml.Application
.
Для приложений Windows Forms — виртуальный метод
OnThreadException
класса
System.Windows.Forms.NativeWindow
, одноименный виртуальный метод
класса
System.Windows.Forms.Application
и событие
ThreadException
класса
System.Windows.Forms.Application
.
Для приложений Windows Presentation Foundation (WPF) — событие
DispatcherUnhandledException
класса
System.Windows.Application
, а также
события
UnhandledException
и
UnhandledExceptionFilter
класса
System.
Windows.Threading.Dispatcher
.
Для приложений Silverlight — событие
UnhandledException
класса
System.
Windows.Application
.
Для приложений ASP.NET Web Form — событие
Error
класса
System.Web.
UI.TemplateControl
. Класс
TemplateControl
— базовый для
System.Web.
UI.Page
и
System.Web.UI.UserControl
. Кроме того, можно задействовать со-
бытие
Error
класса
System.Web.HTTPApplication
.
Для приложений Windows Communication Foundation — свойство
ErrorHandlers
класса
System.ServiceModel.Dispatcher.ChannelDispatcher
.
В завершение темы хотелось бы сказать несколько слов о необработанных
исключениях, которые могут произойти в распределенных приложениях, таких
как веб-сайты и веб-службы. В идеальном мире серверное приложение, в котором
случилось необработанное исключение, зарегистрирует сведения об исключении
в журнале, уведомит клиента о невозможности выполнения запрошенной опе-
рации и завершит свою работу. Но мы живем в реальном мире, в котором может
оказаться невозможным отправить уведомление клиенту. На некоторых серверах,
поддерживающих данные состояния (таких как, например, Microsoft SQL Server),
непрактично останавливать сервер и запускать его заново.
В серверном приложении информацию о необработанном исключении нельзя
возвращать клиенту, так как ему от этих сведений мало пользы, особенно если кли-
ент создан другой компанией. Более того, сервер должен предоставлять клиентам
как можно меньше информации о себе самом, так как это снижает вероятность
успешной хакерской атаки.
Do'stlaringiz bilan baham: |