Я работаю над веб-приложением, которое отображает данные журналов событий, аналогично Event Viewer.Приложение также должно предоставлять пользователям возможность подписываться на журналы событий и получать уведомления, когда запись записывается в подписанные журналы, с использованием веб-службы.
Я использую этот код для подписки на журнал событий.в веб-сервисе:
EventLog eventLog = new EventLog(observer.logName, observer.machineName);
eventLog.EnableRaisingEvents = true;
eventLog.EntryWritten += new EntryWrittenEventHandler(eventLog_EntryWritten);
eventList.Add(eventLog);
Я пытаюсь использовать наблюдателей в качестве подписчиков на журналы событий, а когда обрабатывается событие EventWritten, вызвать метод Update одного наблюдателя.Проблема в том, что я не знаю, как дифференцировать журналы событий, поскольку все они используют один и тот же обработчик событий.Я делаю это, потому что количество журналов событий отличается от одного компьютера к другому.Кроме того, я хочу, чтобы наблюдатели обрабатывали только один тип EventLog, т.е.один наблюдатель отправит электронное письмо, когда событие будет записано в журнал приложений.
Я использую эту строку кода для получения всех журналов на текущем компьютере:
remoteEventLogs = EventLog.GetEventLogs(machineName);
Событие EventWrittenобработчик имеет этот параметр отправителя объекта, но Visual Studio показывает его тип как EventLogInternal, который я не могу использовать, и я не могу привести его к EventLog, чтобы получить свойство EventLog.Log.Если я пытаюсь разыграть его следующим образом:
void eventLog_EntryWritten(object sender, EntryWrittenEventArgs e)
{
var log = (EventLog)sender;
}
Я получаю исключение, говорящее, что я не могу разыграть EventLogInternal к EventLog.
Есть ли способ узнать, какой EventLog вызываетсобытие?
Спасибо