У меня есть приложение C # WebService, в котором я хочу перехватить все необработанные исключения, выброшенные из приложения.
Как я могу это сделать?
По какой-то причине событие Application_Error не запускается для веб-служб (см. другой вопрос ). Сам мистер Джефф Этвуд опубликовал несколько советов в блоге ужасов кодирования .
Он пишет:
* Поместите try..catch вокруг каждого метода WebService. Эти методы, как правило, являются обертками для других классов, так что это не так плохо, как кажется, но все равно не хорошо. * использовать шаблон проектирования Facade для извлечения всех объектов из родительских объектов, которые .. обычно делают попытку .. поймать метод .Execute. Спасибо, но нет, спасибо. * Написать собственное расширение SOAP или HttpModule. Это звучит разумно, но .. сложно. Если это такое классное, важное расширение или HttpModule, кто-нибудь уже написал бы его?
Один из способов - подписаться на событие AppDomain.UnhandledException где-нибудь в обработчике App_Start.
AppDomain.UnhandledException
App_Start
Возможно, работа для аспектно-ориентированного подхода. Некоторые примеры;
PostSharp
Spring.Net