Глобальный try-cath

Red Wind
Дата: 16.04.2007 20:08:21
Доброго времени суток!
У меня есть несколько классов, в каждом из которых объявлено очень много небольших методов, в свою очередь методы вызываються во многих частях программы. Мне не хочеться перегружать методы излишним кодом и писать в каждом из них блок try-cath. Так вот, возможно ли глобальная обработка исключительных ситуаций?

P.S. Пишу на asp.net, пробовал ковырять обработчик Application_Error из Global.asax но таким способом не перехватываються ошибки работы с базой данных. И вообще хотелось бы найдти решение не специфичное для asp.net, а работающее для всего фрэймворка.
Лиман Артём
Дата: 16.04.2007 21:04:40
Не знаю подойдет ли тебе такое решение, но мы организовали перехват необработанных исключений внутри метода ProcessRequest в базовом классе, который реализует IHttpHandler и который обслуживает все запросы на aspx страницы
Red Wind
Дата: 16.04.2007 23:21:05
То есть вы создавали наследник класса System.Web.UI.Page и переопределяли метод ProcessRequest? А можно пример кода?:)
Лиман Артём
Дата: 17.04.2007 12:42:16
Red Wind
То есть вы создавали наследник класса System.Web.UI.Page и переопределяли метод ProcessRequest? А можно пример кода?:)

Нет, просто класс реализующий IHttpHandler и который зарегистрирован в web.config как хэндлер aspx файлов.
Вот урезанный code snippet
public abstract class MyHandler: IHttpHandler
{
protected virtual IHttpHandler PageInstanceGet(HttpContext aContext)
{
 return PageParser.GetCompiledPageInstance(aContext.Request.Path, aContext.Request.PhysicalPath, aContext);
}
		
public virtual void ProcessRequest(HttpContext aContext)
{
 try
 {
  PageInstanceGet().ProcessRequest(aContext);
 }
 catch
 ....
}
}
}

Как на меня, такой подход дает больший контроль над происходящим и централизирует обработку. Возможна конкретно в твоем случае можна применить что то другое.
Red Wind
Дата: 17.04.2007 16:16:26
Спасибо! Вроде бы всё работает, но здесь не перехватываются ошибки работы с базами данных. В чём может быть проблема?
vbnet2000
Дата: 17.04.2007 18:09:09
Не понимаю в чем проблема при стандартной технике обработке ошибок?

Ну типа в любом месте делаем THROW
A в Application_error делаем редирект на страничку с ошибкой. Что тут плохого?
Ну понятно что ошибка может выводится в более или менее подробном формате в зависимости от параметра.
Dmitry Uvarov
Дата: 17.04.2007 18:48:44
к слову, exception-driven logic - не самый лучший подход к программированию, может лучше постараться поменьше делать исключений? в каждом методе - это, конечно, перебор
http://ln.com.ua/~openxs/articles/smart-questions-ru.html
Лиман Артём
Дата: 17.04.2007 18:58:30

АъT дмйтлм ноеиочълм неоесачпьачпщъз. Бпм имлиоеплм дейчеэщ?


________________________________________________
Never ask users what they want or they will tell you




Posted via ActualForum NNTP Server 1.4

NARKOMчик
Дата: 17.04.2007 23:30:52
>>АъT дмйтлм ноеиочълм неоесачпьачпщъз. Бпм имлиоеплм дейчеэщ?
хорошо сказал!!! я чуть не прослезился...
-----------------------------------------------
Нелегальный пользователь ПО МелкоSoft
Ex_Soft
Дата: 18.04.2007 10:10:10
vbnet2000

Не понимаю в чем проблема при стандартной технике обработке ошибок?

Ну типа в любом месте делаем THROW
A в Application_error делаем редирект на страничку с ошибкой.

Red Wind

обработчик Application_Error из Global.asax но таким способом не перехватываються ошибки работы с базой данных

Вот как раз намедни наблюдал: вылез exception при работе с БД - в log-файл все попало, а редирект на страницу отображения ошибки - не произошел Картинка с другого сайта.
_________________
"Helo, word!" - 17 errors 56 warnings