Выявление неисправностей работы служб Windows
27C# и .NET --- Основы .NET --- Выявление неисправностей работы служб Windows
Поиск и выявление неисправностей в службах отличается от выявления неисправностей в обычных приложениях. В данной статье рассматриваются некоторые особенности служб в этом плане, а также проблемы, встречающиеся в интерактивных службах, и способы регистрации связанных со службами событий в журналах.
Разработку службы лучше всего начинать с создания сборки со всеми желаемыми функциональными возможностями и тестового клиентского приложения. Тогда отладку и обработку ошибок можно производить самым обычным образом, а когда тестовое приложение будет готово, просто создать службу с использованием этой сборки. Разумеется, впоследствии со службой могут возникать и другие проблемы. Ниже приведен ряд рекомендаций:
Не отображайте сообщения об ошибках службы в окне сообщений (если только служба не является интерактивной, запускаемой на клиентской системе). Вместо этого следует применять службу регистрации событий, чтобы все ошибки фиксировались в журнале событий. Естественно, в клиентском приложении, где используется служба, можно отображать окно с сообщениями об ошибках для уведомления пользователей.
Запускать службу в отладчике нельзя, но зато отладчик можно подключить к работающему процессу службы. Для этого необходимо сначала открыть решение с исходным кодом службы и расставить точки останова, а затем в меню Debug (Отладка) в Visual Studio выбрать команду Processes (Процессы) и присоединиться к работающему процессу службы.
Для наблюдения за активностью служб можно применять программу Performance Monitor (Монитор производительности). Она позволяет добавлять для службы собственные объекты производительности. В результате можно получить дополнительную информацию для отладки. Например, для службы цитат можно было бы создать объект, отслеживающий общее количество возвращаемых цитат, время, затрачиваемое на инициализацию и т.д.
Службы могут сообщать об ошибках и предоставлять другую информацию, добавляя соответствующие события в журнал событий. Класс службы, унаследованный от ServiceBase, автоматически регистрирует события, когда для свойства AutoLog установлено значение true. Класс ServiceBase проверяет это свойство и добавляет в журнал запись обо всех поступающих запросах на выполнение запуска, останова, приостановки и возобновления работы службы.