Аналитическая трассировка WCF
В примере WCFAnalyticTracingExtensibility показано, как добавить собственные события трассировки трассировки в поток аналитических трассировок, которые Windows Communication Foundation (WCF) записывает в ETW в платформа .NET Framework. Аналитически отслеживаемые события предназначены для упрощения добавления видимости в службы без ущерба для производительности. В этом примере показано, как использовать System.Diagnostics.Eventing API для записи событий, которые интегрируются со службами WCF.
Дополнительные сведения об System.Diagnostics.Eventing API см. в статье System.Diagnostics.Eventing.
Дополнительные сведения о трассировке событий в Windows см. в статье "Улучшение отладки и настройки производительности с помощью ETW".
Удаление EventProvider
В этом образце используется класс System.Diagnostics.Eventing.EventProvider, который реализует System.IDisposable. При реализации трассировки для службы WCF, скорее всего, вы можете использовать EventProviderресурсы службы в течение всего времени существования службы. По этой причине, а также для удобочитаемости, этот образец никогда не удаляет упакованный EventProvider. Если по какой-либо причине ваша служба имеет другие требования для трассировки и вы должны удалить этот ресурс, то вы должны изменить этот пример в соответствии с подходящими рекомендациями по удалению неуправляемых ресурсов. Дополнительные сведения об удалении неуправляемых ресурсов см. в разделе "Реализация метода Dispose".
Сравнение резидентного размещения с размещением на веб-сервере
Для веб-размещенных служб аналитические трассировки WCF предоставляют поле с именем HostReference, которое используется для идентификации службы, которая генерирует трассировки. В этой модели могут участвовать расширяемые пользовательские трассировки, а в данном образце демонстрируются рекомендации, как это сделать. Формат ссылки на веб-узел, когда символ "|" фактически отображается в результирующей строке, может быть одним из следующих:
Если приложение находится не в корне.
<SiteName><ApplicationVirtualPath> |<ServiceVirtualPath>|<Имя службы>
Если приложение находится в корне.
<SiteName> |<ServiceVirtualPath>|<Имя службы>
Для локальных служб аналитические трассировки WCF не заполняют поле HostReference. В этом образце класс WCFUserEventProvider
ведет себя согласованно при использовании резидентной службой.
Данные пользовательских событий
Манифест поставщика событий WCF определяет три события, которые предназначены для создания авторами служб WCF из кода службы. В следующей таблице приведена разбивка этих трех событий.
Мероприятие | Description | ИД события |
---|---|---|
UserDefinedInformationEventOccurred | Это событие выдается, когда в службе происходит что-то примечательное, что не является проблемой. Например, можно выдать событие после успешного вызова базы данных. | 301 |
UserDefinedWarningOccurred | Это событие выдается, когда возникает проблема, которая в будущем может привести к сбою. Например, можно выдавать событие предупреждения, когда вызов базы данных завершается неудачей, но удалось выполнить восстановление, переключившись на резервное хранилище данных. | 302 |
UserDefinedErrorOccurred | Это событие выдается, когда служба не ведет себя, как положено. Например, можно выдавать событие, если вызов базы данных завершается неудачей и данные не удалось получить из другого источника. | 303 |
Использование этого образца
Откройте файл решения WCFAnalyticTracingExtensibility.sln с помощью Visual Studio.
Чтобы создать решение, нажмите клавиши CTRL+SHIFT+B.
Чтобы запустить решение, нажмите клавиши CTRL+F5.
В веб-браузере щелкните Calculator.svc. В браузере должен появиться URI WSDL-документа для службы. Скопируйте этот URI.
Запустите тестовый клиент WCF (WcfTestClient.exe).
Тестовый клиент WCF (WcfTestClient.exe) находится в
\<Visual Studio Install Dir>\Common7\IDE\WcfTestClient.exe
.В тестовом клиенте WCF добавьте службу, выбрав "Файл", а затем добавьте службу.
Добавьте адрес конечной точки в поле ввода.
Нажмите кнопку ОК , чтобы закрыть диалоговое окно.
Служба ICalculator добавляется в левой области в разделе "Мои проекты служб".
Откройте приложение просмотра событий.
Перед вызовом службы запустите Просмотр событий и убедитесь, что журнал событий прослушивает события отслеживания, создаваемые службой WCF.
В меню "Пуск" выберите Администратор istrative Tools, а затем Просмотр событий. Включите журналы аналитики и отладки.
В представлении дерева в Просмотр событий перейдите к Просмотр событий, приложениям и службам, Microsoft, Windows и приложениям application Server. Щелкните правой кнопкой мыши серверные приложения, выберите "Вид" и " Показать журналы аналитики и отладки".
Убедитесь, что параметр Show Analytic and Debug Logs проверка. Включите журнал Аналитики.
В представлении дерева в Просмотр событий перейдите к Просмотр событий, журналам приложений и служб, Microsoft, Windows, приложениям приложений и аналитике. Щелкните правой кнопкой мыши "Аналитика" и выберите "Включить журнал".
Проверьте службу с помощью тестового клиента WCF.
В тестовом клиенте WCF дважды щелкните Add() в узле службы ICalculator.
Метод Add() отображается в правой области с двумя параметрами.
Введите 2 для первого параметра и 3 для второго.
Нажмите кнопку "Вызвать", чтобы вызвать метод.
Перейдите в окно Просмотр событий, которое вы уже открыли. Перейдите к Просмотр событий, приложениям и службам, Microsoft, Windows, приложениям-приложениям.
Щелкните правой кнопкой мыши узел аналитики и выберите "Обновить".
События появятся в области справа.
Найдите событие с идентификатором 303 и щелкните его дважды, чтобы открыть его и ознакомиться с его содержимым.
Это событие было создано методом
Add()
службы ICalculator и имеет полезные данные, равные "2+3=5".
Очистка (необязательно)
Откройте Средство просмотра событий.
Перейдите к Просмотр событий, журналам приложений и служб, Microsoft, Windows и приложениям Application-Server. Щелкните правой кнопкой мыши "Аналитика " и выберите "Отключить журнал".
Перейдите к Просмотр событий, приложениям и службам, Microsoft, Windows, Application-Server-Applications и Analytic. Щелкните "Аналитика" правой кнопкой мыши и выберите "Очистить журнал".
Нажмите кнопку "Очистить", чтобы очистить события.
Известная проблема
В Просмотр событий возникает известная проблема, из-за которой не удалось декодировать события ETW. Может появиться сообщение об ошибке, которое говорит: "Описание идентификатора <> события из исходного сервера приложений Microsoft-Windows-Application Server-Applications не удается найти. Компонент, вызывающий это событие, не установлен на локальном компьютере или установка повреждена. Вы можете установить или восстановить компонент на локальном компьютере". При возникновении этой ошибки выберите "Обновить " в меню "Действия ". Теперь декодирование события должно выполняться правильно.