регистрации событий отменяется. Если приложение просто удаляется, этот ключ реестра остается, если не будет вызван метод EventLog.DeleteEventSource()
.
Трассировка
Можно сделать так, чтобы все сообщения трассировки направлялись в журнал событий. На самом деле это не нужно, так как в нормально работающей системе журнал событий будет перегружен сообщениями трассировки. Системный администратор пропустит действительно важные записи, если это произойдет. Помните, что тип записи события — это ошибка, предупреждение и информационное. При этом информационные сообщения редко являются информацией об успехе. Включение трассировочных сообщений в журнал событий может быть полезным свойством для тестирования проблемных служб. Трассировка возможна как с отладочным, так и с окончательным кодом.
Чтобы послать трассировочные сообщения в журнал событий, должен быть создан объект EventLogTraceListener
и добавлен в список приемника класса Trace
:
EventLogTraceListener listener = new EventLogTraceListener(eventLog1);
Trace.Listeners.Add(listener);
Теперь все трассировочные сообщения посылаются в журнал событий:
Trace.WriteLine('trace message');
Дополнительная информация о методах трассировки находится в главе 6.
Создание приемника событий
Теперь было бы полезно создать приложение, которое получает событие, когда в службе происходит что-то плохое. Мы создадим простое оконное приложение, отслеживающее события службы Quote
:
Оконное приложение имеет только окно списка и кнопку выхода:

Компонент EventLog
добавляется в этот проект перетаскиванием его из панели инструментов. Свойство Log
задается как Application
, a Source
как источник службы QuoteService
. Класс EventLog
также имеет свойство EnableRaisingEvents
. До сих пор мы не говорили об этом свойстве. По умолчанию для него используется значение false, задание его как true означает, что событие создается каждый раз, когда происходит это событие, и можно написать обработчик событий для оконного события EntryWritten
.
В файле EventListener.cs
свойства задаются в методе InitializeComponent()
:
private void InitializeComponent() {
this.eventLogQuote = new System.Diagnostics.EventLog();
this.buttonExit = new System.Windows.Forms.Button();
this.listBoxEvents = new System.Windows.Forms.ListBox();
((System.ComponentModel.ISupportInitialize)
(this.eventLogQuote)).BeginInit();
this.SuspendLayout();
//
// eventLogQuote
//
this.eventLogQuote.EnableRaisingEvents = true;
this.eventLogQuote.Log = 'Application';
this.eventLogQuote.Source = 'QuoteService';
this.eventLogQuote.SynchronizingObject = this;
this.eventLogQuote.EntryWritten +=
new System.Diagnostics.EntryWrittenEventHandler(this.OnEntryWritten);
// ...
Программа обработки OnEntryWritten()
получает объект EntryWrittenEventArgs
в качестве аргумента, где можно получить всю информацию из события. С помощью свойства Entry
мы получаем объект EventLogEntry
с информацией о времени, источнике события, типе, категории и т. д.:
protected void OnEntryWritten(object sender, System.Diagnostics.EntryWrittenEventArgs e) {
DateTime time = e.Entry.TimeGenerated;
string message = e.Entry.Message;
listBoxEvents.Items.Add(time + ' ' + message);
}
Выполняющееся приложение показывает все события для QuoteService
:

Мониторинг производительности
Мониторинг производительности может использоваться для получения информации о нормальном выполнении службы. Это прекрасный инструмент, который помогает понять нагрузку системы и наблюдать изменения и тенденции.
Windows 2000 имеет множество объектов производительности, таких как System
, Memory
, Objects
, Process
, Processor
, Thread
, Cache
и т. д. Каждый из этих объектов имеет множество показателей для мониторинга. С помощью объекта Process для всех процессов или для определенных экземпляров процессов можно контролировать время пользователя, счетчик дескрипторов. Ошибки страниц, счетчик потоков выполнения и т. д. В некоторых приложениях также имеются специфические объекты, например SQL Server.
Для нашей службы цитат может представлять интерес получение информации о числе клиентских запросов, размере данных, посылаемых по каналам связи, и т.д.
Классы мониторинга производительности
Пространство имен System.Diagnostics
имеет следующие классы для мониторинга производительности:
□ PerformanceCounter
используется как для мониторинга счетчиков, так и для записи счетчиков. С помощью этого класса можно создавать новые категории производительности.