Уведомление об исключениях в .NET - PullRequest
2 голосов
/ 15 апреля 2011

У меня есть программа WPF, которую я разрабатываю, в которой я хочу перехватывать исключения и отправлять уведомления центральному (стороннему) органу, возвращая контроль пользователю. Система, обычно встречающаяся в таких программах, как Firefox, Eclipse и т. Д.

Для:

Пользователь нажимает кнопку в моей программе WPF, которая не работает. Обнаружено исключение, и пользователю предоставляется диалоговое окно «Черт, мы что-то напортачили. Мы получили уведомление и исправим это как можно скорее. Тем временем вы можете быть осторожны с <some smart summary of events>»

После этого управление возвращается в работоспособное состояние. На серверной стороне копия исключения (traceback и т. Д.) Отправляется либо по электронной почте, либо через какой-либо интерфейс pub / sub команде разработчиков.

По сути, я хочу что-то вроде Hoptoad или Exceptional (Rails).

  1. Такая библиотека уже существует?
  2. Если нет, то какие библиотеки электронной почты и / или публикации / подписки лучше всего использовать для его создания.

Ответы [ 4 ]

1 голос
/ 15 апреля 2011

Возможно, вы захотите взглянуть на Корпоративную библиотеку (EntLib) - Блок приложения ведения журнала.

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

0 голосов
/ 15 апреля 2011
// WPF might have another event, this one works for winforms
Application.ThreadException += OnUnhandledThreadException;

//console apps
AppDomain.CurrentDomain.UnhandledException += OnUnhandledException;

// example method
static void OnUnhandledException(object sender, UnhandledExceptionEventArgs args) 
{
    Exception e = (Exception) args.ExceptionObject;

    SmtpClient client = new SmtpClient("my.smtp.server");
    var message = new MailMessage("support@mycompany.se", "mycoolapp@somewhere")
        { 
            Subject = "App failed",
            Body = e.ToString()
        };
    client.Send(message);

    MessageBox.Show("Whoops. App failed. Sorry. Goodbye!");
}
0 голосов
/ 15 апреля 2011

Мы использовали регистрацию в EntLib в моей предыдущей команде, и это было очень полезно, когда возникало исключение, оно регистрировалось в БД и отправляло нам электронное письмо.

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

0 голосов
/ 15 апреля 2011

У Redgates smartassembly есть репортер исключений, который может добиться цели.Если не прокатишь, то не слишком сложно.

...