Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В примере 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 |
Использование этого примера
Откройте файл решения 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.
В меню "Пуск " выберите "Администрирование" и "Средство просмотра событий". Включите журналы аналитики и отладки .
В представлении дерева в Средстве просмотра событий перейдите к Средство просмотра событий, Журналы приложений и служб, Microsoft, Windows и Application Server-приложения. Щелкните правой кнопкой мыши сервер приложений - Приложения, выберите Просмотр, затем Показать журналы аналитики и отладки.
Убедитесь, что установлен флажок "Показать аналитические и отладочные журналы ". Включите журнал Аналитический.
В представлении дерева в средстве просмотра событий перейдите к Средство просмотра событий, Журналы приложений и служб, Microsoft, Windows, Application Server-Applications и Analytic. Щелкните правой кнопкой мыши "Аналитика" и выберите "Включить журнал".
Протестируйте службу с помощью тестового клиента WCF.
В тестовом клиенте WCF дважды щелкните Add() в узле службы ICalculator.
Метод Add() отображается в правой области с двумя параметрами.
Введите 2 для первого параметра и 3 для второго параметра.
Нажмите кнопку "Вызвать", чтобы вызвать метод.
Перейдите в окно средства просмотра событий , которое вы уже открыли. Перейдите к Просмотр событий, Приложения и службы, Microsoft, Windows, Сервер приложений-Приложения.
Щелкните правой кнопкой мыши узел Аналитика и выберите Обновить.
События отображаются в правой области.
Найдите событие с идентификатором 303 и дважды щелкните его, чтобы открыть его и проверить его содержимое.
Это событие было сгенерировано методом
Add()службы ICalculator и имеет полезную нагрузку, равную "2+3=5".
Чтобы очистить (необязательно)
Откройте средство просмотра событий.
Перейдите в Средство просмотра событий, журналы приложений и служб, Microsoft, Windows, а затем в Приложения сервера приложений. Щелкните правой кнопкой мыши "Аналитика" и выберите "Отключить журнал".
Перейдите к Просмотру событий, Журналам приложений и служб, Microsoft, Windows, Приложения серверов приложений, а затем Аналитика. Щелкните " Аналитика " правой кнопкой мыши и выберите "Очистить журнал".
Нажмите кнопку "Очистить", чтобы очистить события.
Известная проблема
В средстве просмотра событий существует известная проблема, из-за которой не удалось декодировать события ETW. Может появиться сообщение об ошибке, в котором говорится: "Описание для идентификатора события <id> из источника Microsoft-Windows-Application Server-Applications не найдено." Компонент, вызывающий это событие, не установлен на локальном компьютере или установка повреждена. Вы можете установить или восстановить компонент на локальном компьютере". При возникновении этой ошибки выберите "Обновить " в меню "Действия ". Затем событие должно правильно декодироваться.