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


Вид занятий

В этом разделе описываются трассировки действий в модели трассировки Windows Communication Foundation (WCF). Действия — это блоки обработки, позволяющие пользователю сузить область сбоя. Ошибки, возникающие в одном действии, напрямую связаны между собой. Например, операция заканчивается неудачей в результате сбоя при расшифровывании сообщения. Трассировки операции и расшифровывания сообщения появляются в том же действии и показывают прямую связь между ошибкой расшифровывания и ошибкой запроса.

Настройка трассировки действий

WCF предоставляет предварительно определенные действия для обработки приложений (см. список действий). Кроме того, действия можно определить программно для группирования пользовательских трассировок. Дополнительные сведения см. в разделе "Создание трассировок пользовательского кода".

Чтобы вывести трассировки действий во время выполнения, используйте ActivityTracing параметр для System.ServiceModel источника трассировки или других источников трассировки WCF или пользовательских источников трассировки, как показано в следующем коде конфигурации.

<source name="System.ServiceModel" switchValue="Verbose,ActivityTracing">  

Дополнительные сведения об используемом элементе конфигурации и атрибутах см. в разделе "Настройка трассировки ".

Просмотр действий

Вы можете просмотреть действия и их служебную программу в средстве просмотра трассировки служб (SvcTraceViewer.exe). Если функция ActivityTracing включена, данное средство сортирует трассировки на основе действий. Также можно просматривать перенаправления трассировок. Перенаправление трассировки показывает, как различные действия связаны между собой. Таким образом, можно увидеть, какие действия приводят к запуску других действий. Например, запрос сообщения привел к запуску процедуры подтверждения для получения маркера безопасного диалога.

Корреляция действия в программе Service Trace Viewer

В программе Service Trace Viewer предусмотрено два представления действий.

  • Представление списка , в котором идентификатор действия используется для непосредственной корреляции трассировок между процессами. Трассировки из различных процессов (например, клиента и службы) с одним и тем же идентификатором действия группируются в одном действии. Поэтому ошибка службы и вызванная ей ошибка на клиенте будут отображены в программе в одном представлении действий.

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

Дополнительные сведения и графическое представление средства просмотра трассировки службы см . в средстве просмотра трассировки службы (SvcTraceViewer.exe) и использовании средства просмотра трассировки службы для просмотра коррелированных трассировок и устранения неполадок.

Определение области действия

Действие определяется во время проектирования и обозначает логический блок обработки. Созданные трассировки с одинаковым идентификатором действия являются связанными напрямую; они представляют собой часть одного действия. Поскольку действие может пересекать границы конечной точки (например, запрос), для действия определяются две области.

  • Область Global для каждого приложения. В этой области действие определяется 128-разрядным глобальным уникальным идентификатором действия (gAId). Идентификатор gAid распространяется на конечные точки.

  • Область Local для каждой конечной точки. В этой области действие определяется своим идентификатором gAId, а также именем источника трассировки, создающего трассировки действий, и идентификатором процесса. Эти три значения составляют идентификатор локального действия, lAId. Идентификатор lAId используется для определения (локальных) границ действия.

Схема трассировки

Трассировки можно создавать с использованием любой схемы и для различных платформ Майкрософт. "e2e" (для end to End") — это часто используемая схема. Эта схема включает 128-разрядный идентификатор (gAId), имя источника трассировки и идентификатор процесса. В управляемом коде XmlWriterTraceListener создает трассировки по схеме E2E.

Разработчики могут задавать идентификатор действия, выдаваемый вместе с трассировкой, путем присвоения свойству ActivityId значения идентификатора GUID в локальной памяти потока. Это продемонстрировано в следующем примере.

// set the current Activity ID to a new GUID.  
CorrelationManager.ActivityId = Guid.NewGuid();  

Задание идентификатора gAId в локальной памяти потока будет засвидетельствовано при создании трассировок с помощью источника трассировки, как показано в следующем примере.

TraceSource traceSource = new TraceSource("myTraceSource");  
traceSource.TraceEvent(TraceEventType.Warning, eventId, "Information");  

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

Время существования действия

Строго говоря, свидетельство действия начинается при первом использовании идентификатора действия в созданной трассировке и заканчивается при последнем использовании идентификатора действия в созданной трассировке. Предварительно определенный набор типов трассировок, включающий "Запуск" и "Остановку", предоставляется пространством имен System.Diagnostics для явной пометки границ времени существования действия.

  • Запуск. Обозначает начало действия. Трассировка start предоставляет запись начала новой вехи обработки. В ней содержится новый идентификатор действия для заданного источника трассировки в заданном процессе, кроме случая распространения идентификатора действия на конечные точки, в котором наблюдается одна трассировка «Запуск» для каждой конечной точки. Примером запуска нового действия является создание нового потока для обработки или нового открытого метода.

  • Остановка. Обозначает конец действия. Трассировка Stop предоставляет запись о завершении существующей вехи обработки. В ней содержится существующий идентификатор действия для заданного источника трассировки в заданном процессе, кроме случая распространения идентификатора действия на конечные точки, в котором наблюдается одна трассировка «Остановка» для каждой конечной точки. Примеры остановки действия включают завершение потока обработки или выход из метода, начало которого было обозначено трассировкой Start.

  • Приостановка. Обозначает приостановку обработки действия. Трассировка "Приостановка" содержит существующий идентификатор действия, обработка которого, как ожидается, возобновляется позже. Между событиями «Приостановка» и «Возобновление» никакие трассировки из источника трассировки не создаются. Примером является приостановка действия при вызове внешней функции библиотеки или при ожидании ресурса, такого как порт завершения ввода-вывода.

  • Возобновление. Обозначает продолжение обработки действия. Трассировка "Резюме" содержит существующий идентификатор действия, последний из которого был получен трассировки из текущего источника трассировки. Примером является возврат после вызова внешней функции библиотеки или получение сигнала возобновления обработки от ресурса, такого как порт завершения ввода-вывода.

  • Передача: поскольку некоторые действия вызваны другими или связаны с другими, действия могут быть связаны с другими действиями с помощью трассировки передачи. Трассировка перенаправления записывает непосредственное отношение одного действия к другому.

Трассировки Start и Stop не являются критически важными для корреляции. Однако они могут способствовать повышению производительности, профилированию и проверке области действия.

Используя эти типы, средства могут оптимизировать журналы трассировки для поиска непосредственно связанных событий одного действия или событий в связанных действиях, если средство прослеживает трассировки перенаправления. Например, средства прекращают анализ журналов для заданного действия при обнаружении трассировки Start и Stop.

Эти типы трассировки можно также использовать для профилирования. Ресурсы, которые использовались в течение интервала, определенного маркерами запуска и остановки, представляют инклюзивное время действия, включающее содержащиеся логические действия. После вычитания интервалов времени между трассировками Suspend и Resume получается фактическое время действия.

Трассировку «Остановка» особенно полезно использовать для проверки области реализованных действий. Если некоторые трассировки обработки появляются после трассировки Stop, а не в рамках заданного действия, это может указывать на дефект в коде.

Рекомендации по использованию трассировки действий

Ниже приведены рекомендации по использованию трассировок ActivityTracing (Start, Stop, Suspend, Resume и Transfer).

  • Трассировка является направленным циклическим графом, а не деревом. Можно вернуть управление действию, которое породило заданное действие.

  • Действие обозначает границу обработки, что может быть существенным для администратора системы или для возможности поддержки.

  • Каждый метод WCF, как на клиенте, так и на сервере, привязан к началу нового действия, затем (после завершения работы) завершает новое действие и возвращается к внешнему действию.

  • Долго выполняющиеся (текущие) действия, такие как прослушивание соединений или ожидание сообщений, представляются соответствующими маркерами запуска и остановки.

  • Действия, инициируемые получением или обработкой сообщения, представляются границами трассировки.

  • Действия представляют действия, а не обязательно объекты. Действие должно быть интерпретировано как "это происходит, когда. . . (была создана существенная трассировка)".

См. также