Простой способ реализовать универсальную обработку ошибок в приложении ASP.Net - PullRequest
0 голосов
/ 01 сентября 2011

Люди,

У меня есть приложение, которое представляет собой первую страницу с множеством пользовательских и пользовательских элементов управления. ASP.Net WebParts используются. На веб-странице и на ее главной странице почти нет кода: он состоит из различных компонентов.

Требования к оформлению включают панель отображения сообщений об ошибках. Клиент хотел бы, чтобы приложение отображало любые ошибки, возникающие в любой части приложения, на дисплее сообщений об ошибках, а не переходило на пользовательскую страницу ошибок. (Это было недавнее решение: когда мы начинали, мы думали о специальной странице ошибки.)

Насколько я могу судить, WebParts не обеспечивает никакой обработки ошибок по умолчанию (без захвата ошибок и отображения сообщений), а пользовательские элементы управления не обязательно запускают событие OnError при возникновении внутренней ошибки.

Так что я смотрю на завершение абсолютно всего в Try ... Поймать блоки, по крайней мере на уровне представления, и выполняю обработку. Итак, мой вопрос: есть ли простой способ реализовать какой-то глобальный или, по крайней мере, общеклассовый обработчик ошибок, который будет обрабатывать ошибку, как я выберу, прерывать выполняющуюся подпрограмму, но возвращать (после обработки ) для вызывающего метода, который не удалось?

Я готов адаптировать код для проверки того, что подпрограммы сделали то, что они должны были, и вернули соответствующие значения (например, ненулевые объекты данных.) Я не хочу, чтобы весь процесс был прерван до самый верх, с пропущенным рендерингом, или (конечно) знаменитый желто-белый экран.

Я полагаю, что это относится к аспектно-ориентированному программированию, но я не думаю, что ASP.Net предоставляет что-то подобное. У меня не сложилось впечатление, что EntLib 5.0 тоже.

Я бы обожал это, если бы можно было украсить метод атрибутом, который означал бы "При ошибке вызвать такой-то статический метод такого-то класса". Но я сомневаюсь, что это так.

Любые предложения приветствуются.

Спасибо

Энн Л.

Ответы [ 2 ]

3 голосов
/ 01 сентября 2011

Тебе нужно взглянуть на Элму. Если вы гуглите «elmah», в нем есть модуль / обработчик ошибок, который делает в значительной степени то, что вы ищете (хотя это потребует дополнительной настройки ..)

Возможно, вы захотите, чтобы ваши ошибки «всплыли», хотя ... Существуют серьезные проблемы с производительностью при написании нескольких блоков Try..Catch..Finally ...

3 голосов
/ 01 сентября 2011

Для начала, это плохая практика - размещать обработчики Try Catch вокруг каждого куска кода в вашем приложении. Каждый раз, когда вы настраиваете эту настройку, происходит небольшое снижение производительности, и это может очень быстро замедлить процесс.

В вашем файле Global.asax.cs (или .vb) есть метод Application_Error, который является глобальным обработчиком ошибок. Это отловит любую ошибку, которую вы ранее не поймали (или не выбросили) в приложении.

Вы можете легко разместить здесь свой код обработки ошибок. Это может быть так же просто, как выгрузить сообщение об ошибке в журнал для последующего просмотра или проверить тип исключения (SQL vs. File против HTTP) и выполнить задачу обработки ошибок, связанную с этим типом.

...