Лучший способ выяснить, какая ошибка прекращается AC # Windows службы? - PullRequest
1 голос
/ 12 ноября 2010

Моя служба windows c # умирает из-за неизвестной ошибки в глубине одного из рабочих потоков, которые она создает.

Есть ли способ выяснить исключение, которое приводит к прекращению службы?

(без записи десятка попыток / ловить / регистрировать коды ошибок).

Простой однократный отчет об ошибке, вызвавшей остановку службы.

Ответы [ 4 ]

2 голосов
/ 12 ноября 2010

Это просто, реализовать обработчик событий для AppDomain.CurrentDomain.UnhandledException и записать значение e.ExceptionObject.ToString ().

0 голосов
/ 12 ноября 2010

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

Однако, кроме этого, вы можете присоединить Visual Studio к работающему процессу, как показано в этой статье MSDN. Чтобы избежать этого, я обычно добавляю некоторый код при запуске службы, чтобы, если exe-файл запускался с параметром командной строки -c, он запускался как обычный процесс, который можно запустить из Visual Studio. Эта статья проекта кода показывает нечто похожее на это.

0 голосов
/ 12 ноября 2010

Простой способ перенести ошибки из VS в журнал ошибок Windows и проверить их там.Вы должны использовать некоторые сторонние инструменты, если вы предпочитаете получать список ошибок в виде отчета. Logger in c #

, если вы предпочитаете перейти на более простой / дешевый, попробуйте приведенный выше код.Это очень легко и просто, чем вы думали

0 голосов
/ 12 ноября 2010

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

Второй подход немного более сложный, и я знаю, что вы попросили что-то действительно быстрое и разовое, но, если честно, я собираюсь рекомендовать лучший способ разработки служб Windows, и как только выСделав это, вы никогда не вернетесь ... и это сэкономит вам часы боли , поэтому я все равно дам вам совет:

Извлеките ядро ​​своей службы, чтобы бытьработать независимо в простом хосте консольного приложения.Этот подход означает, что вы можете полностью запустить и отладить его в Visual Studio, работающем как обычный старый исполняемый файл, или даже на тестовом сервере с подключенным сеансом удаленной отладки.Для настоящей "живой" службы Windows ваш код службы представляет собой тонкую оболочку вокруг тестируемого отлаживаемого ядра службы.Это снова и снова работает для меня.

Ваша основная служба будет предоставлять методы Start () и Stop (), которые могут вызываться вашим хостом Windows Service в процессе работы.Вот и все.

Существует действительно хороший проект OSS под названием Topshelf , который предоставляет полнофункциональную и хорошо протестированную версию обертки, которую я описал, и вы можете прочитать пример для разработчикаиспользуется здесь .

...