Поделиться через


Аналитическая трассировка 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".

Self-Hosting и веб-хостинг

Для веб-размещенных служб аналитические трассировки WCF предоставляют поле с именем HostReference, которое используется для идентификации службы, которая генерирует трассировки. Расширяемые трассировки пользователей могут участвовать в этой модели, и в этом примере демонстрируются рекомендации по этому использованию. Формат ссылки на веб-узел, когда символ "|" фактически отображается в результирующей строке, может быть одним из следующих:

  • Если приложение не находится в корневом каталоге.

    <SiteName><ApplicationVirtualPath> |<ServiceVirtualPath>|<Имя службы>

  • Если приложение находится в корне.

    <SiteName> |<ServiceVirtualPath>|<Имя службы>

Для локальных служб аналитические трассировки WCF не заполняют поле HostReference. Класс WCFUserEventProvider в этом примере работает согласованно при использовании локальной службой.

Данные настроенных событий

Манифест поставщика событий ETW в WCF определяет три события, которые предназначены для генерации авторами служб WCF из кода службы. В следующей таблице показана разбивка трех событий.

Событие Описание Идентификатор события
Произошло пользовательское информационное событие Зарегистрируйте это событие, когда в вашей службе происходит что-то примечательное, что не является проблемой. Например, вы можете выпустить событие после успешного вызова к базе данных. 301
ПользовательскоеПредупреждениеПроизошло Выведите это событие, когда возникает проблема, которая может привести к сбою в будущем. Например, вы можете сгенерировать событие предупреждения, когда вызов базы данных завершился неудачей, но вам удалось восстановиться, переключившись на резервное хранилище данных. 302
Произошла пользовательская ошибка Сгенерируйте это событие, когда ваша служба не ведет себя ожидаемым образом. Например, вы можете выпустить событие, если вызов базы данных завершается сбоем, и не удалось получить данные из другого места. 303

Использование этого примера

  1. Откройте файл решения WCFAnalyticTracingExtensibility.sln с помощью Visual Studio.

  2. Чтобы создать решение, нажмите клавиши CTRL+SHIFT+B.

  3. Чтобы запустить решение, нажмите клавиши CTRL+F5.

    В веб-браузере щелкните Calculator.svc. URI WSDL-документа для службы должен отображаться в браузере. Скопируйте этот универсальный код ресурса (URI).

  4. Запустите тестовый клиент WCF (WcfTestClient.exe).

    Тестовый клиент WCF (WcfTestClient.exe) находится в \<Visual Studio Install Dir>\Common7\IDE\WcfTestClient.exe.

  5. В тестовом клиенте WCF добавьте службу, выбрав "Файл", а затем добавьте службу.

    Добавьте адрес конечной точки в поле ввода.

  6. Нажмите кнопку ОК , чтобы закрыть диалоговое окно.

    Служба ICalculator добавляется в левой области в разделе "Мои проекты служб".

  7. Откройте приложение средства просмотра событий.

    Перед вызовом службы запустите средство просмотра событий и убедитесь, что журнал событий отслеживает события, исходящие от службы WCF.

  8. В меню "Пуск " выберите "Администрирование" и "Средство просмотра событий". Включите журналы аналитики и отладки .

  9. В представлении дерева в Средстве просмотра событий перейдите к Средство просмотра событий, Журналы приложений и служб, Microsoft, Windows и Application Server-приложения. Щелкните правой кнопкой мыши сервер приложений - Приложения, выберите Просмотр, затем Показать журналы аналитики и отладки.

    Убедитесь, что установлен флажок "Показать аналитические и отладочные журналы ". Включите журнал Аналитический.

    В представлении дерева в средстве просмотра событий перейдите к Средство просмотра событий, Журналы приложений и служб, Microsoft, Windows, Application Server-Applications и Analytic. Щелкните правой кнопкой мыши "Аналитика" и выберите "Включить журнал".

  10. Протестируйте службу с помощью тестового клиента WCF.

    1. В тестовом клиенте WCF дважды щелкните Add() в узле службы ICalculator.

      Метод Add() отображается в правой области с двумя параметрами.

    2. Введите 2 для первого параметра и 3 для второго параметра.

    3. Нажмите кнопку "Вызвать", чтобы вызвать метод.

  11. Перейдите в окно средства просмотра событий , которое вы уже открыли. Перейдите к Просмотр событий, Приложения и службы, Microsoft, Windows, Сервер приложений-Приложения.

  12. Щелкните правой кнопкой мыши узел Аналитика и выберите Обновить.

    События отображаются в правой области.

  13. Найдите событие с идентификатором 303 и дважды щелкните его, чтобы открыть его и проверить его содержимое.

    Это событие было сгенерировано методом Add() службы ICalculator и имеет полезную нагрузку, равную "2+3=5".

Чтобы очистить (необязательно)

  1. Откройте средство просмотра событий.

  2. Перейдите в Средство просмотра событий, журналы приложений и служб, Microsoft, Windows, а затем в Приложения сервера приложений. Щелкните правой кнопкой мыши "Аналитика" и выберите "Отключить журнал".

  3. Перейдите к Просмотру событий, Журналам приложений и служб, Microsoft, Windows, Приложения серверов приложений, а затем Аналитика. Щелкните " Аналитика " правой кнопкой мыши и выберите "Очистить журнал".

  4. Нажмите кнопку "Очистить", чтобы очистить события.

Известная проблема

В средстве просмотра событий существует известная проблема, из-за которой не удалось декодировать события ETW. Может появиться сообщение об ошибке, в котором говорится: "Описание для идентификатора события <id> из источника Microsoft-Windows-Application Server-Applications не найдено." Компонент, вызывающий это событие, не установлен на локальном компьютере или установка повреждена. Вы можете установить или восстановить компонент на локальном компьютере". При возникновении этой ошибки выберите "Обновить " в меню "Действия ". Затем событие должно правильно декодироваться.

См. также