Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Глобальный try-cath 
:(
    Опции темы
Red Wind
Дата 16.4.2007, 19:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 280
Регистрация: 25.6.2004
Где: Минск

Репутация: нет
Всего: 2



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

P.S. Пишу на asp.net, пробовал ковырять обработчик Application_Error из Global.asax но таким способом не перехватываються ошибки работы с базой данных. И вообще хотелось бы найдти решение не специфичное для asp.net, а работающее для всего фрэймворка.
PM MAIL ICQ   Вверх
Exception
Дата 16.4.2007, 20:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 29
Всего: 186



Цитата(Red Wind @  16.4.2007,  20:05 Найти цитируемый пост)
Мне не хочеться перегружать методы излишним кодом и писать в каждом из них блок try-catch.


А не нужно их писать всюду. Используй конструкцию с умом smile .
PM   Вверх
HalkaR
Дата 16.4.2007, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пуфыстый назгул
****


Профиль
Группа: Экс. модератор
Сообщений: 2132
Регистрация: 8.12.2002
Где: В Москве

Репутация: 14
Всего: 42



Код

    internal static class Program
    {
        private static readonly ILog LOG = LogFactory.GetLogger(typeof(Program));

        [STAThread]
        private static void Main(String[] args)
        {
                Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
                Application.ThreadException += new ThreadExceptionEventHandler(Application_ThreadException);
                AppDomain.CurrentDomain.UnhandledException +=
                    new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);

                try
                {
                    Application.EnableVisualStyles();
                    Application.SetCompatibleTextRenderingDefault(false);
                    MainForm form = new MainForm();
                    if (!form.IsDisposed)
                    {
                        Application.Run(form);
                    }
                }
                catch (Exception ex)
                {
                    ShowErrorForm(ex.StackTrace + '\t' + ex.Message);
                }
            }
        }

        private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
        {
            if (e.ExceptionObject is Exception && (e.ExceptionObject as Exception) != null)
                ShowErrorForm((e.ExceptionObject as Exception).StackTrace + '\t' + (e.ExceptionObject as Exception).Message);
        }

        private static void Application_ThreadException(object sender, ThreadExceptionEventArgs e)
        {
            if (e.Exception != null)
            {
                ShowErrorForm(e.Exception.StackTrace + '\t' + e.Exception.Message);
            }
        }

Вот так можно отловить 99% ошибок. Но использовать это надо с умом.

Добавлено через 1 минуту и 35 секунд
А, так это в ASP .Net? Не заметил... А почему в этом форуме?
PM MAIL   Вверх
Red Wind
Дата 16.4.2007, 22:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 280
Регистрация: 25.6.2004
Где: Минск

Репутация: нет
Всего: 2



Цитата(HalkaR @  16.4.2007,  21:54 Найти цитируемый пост)
А, так это в ASP .Net? Не заметил... А почему в этом форуме?

Просто 'mj же может не только в веб приложениях пригодиться.

Цитата(Exception @  16.4.2007,  20:54 Найти цитируемый пост)
 Используй конструкцию с умом  .

Просто я хочу что бы все сообщения об ошибках выводились в одном месте. Вот собственно ради чего я это мучу.
PM MAIL ICQ   Вверх
Exception
Дата 16.4.2007, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 29
Всего: 186



Цитата(Red Wind @  16.4.2007,  23:12 Найти цитируемый пост)
Просто я хочу что бы все сообщения об ошибках выводились в одном месте. Вот собственно ради чего я это мучу. 


Ну так тебе прямая дорога к web.config, а именно,

Код
<customErrors defaultRedirect="ErrorPage.aspx" mode="On" />

PM   Вверх
HalkaR
Дата 17.4.2007, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пуфыстый назгул
****


Профиль
Группа: Экс. модератор
Сообщений: 2132
Регистрация: 8.12.2002
Где: В Москве

Репутация: 14
Всего: 42



Red Wind, просто описанный мною способ прекрасно работает на WinApp, но в ASP.Net ею воспользоваться нельзя. А в ASP.Net методы совсем другие. Так что необходимо учитывать.
PM MAIL   Вверх
Red Wind
Дата 17.4.2007, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 280
Регистрация: 25.6.2004
Где: Минск

Репутация: нет
Всего: 2



Цитата(Exception @  16.4.2007,  22:32 Найти цитируемый пост)
Ну так тебе прямая дорога к web.config, а именно,

Вся проблема в том, что я хочу выводить сообщение не на отдельной страничке, а в лэйбле на основной странице. Вроде бы для этого вполне подходит перехват Page_Error.
Код

    protected void Page_Error(object sender, EventArgs e)
    {
        StringBuilder builder = new StringBuilder();
        Exception ex = Server.GetLastError();

        builder.Append("The following error occurred:<br />");

        if (ex.InnerException != null)
            builder.Append(ex.InnerException.Message);
        else
            builder.Append(ex.Message);

        errorLabel.Text = builder.ToString();

        Server.ClearError();
    }

Конечно ещё можно ловить ошибки в Global.asax, или переопределять HttpHandler, но там не ловятся ошибки работы с БД.
PM MAIL ICQ   Вверх
Red Wind
Дата 17.4.2007, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 280
Регистрация: 25.6.2004
Где: Минск

Репутация: нет
Всего: 2



Только ещё трабла в том, что я не знаю как убить дефолтное сообщение об ошибке. Если вызывать Server.ClearError(), то всё равно вываливается сообщение Unknown error. Как это можно лечить?
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0442 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.