Действие
В этом разделе описываются трассировки действий в модели трассировки Windows Communication Foundation (WCF). Действия — это блоки обработки, позволяющие пользователю сузить область сбоя. Ошибки, возникающие в одном действии, напрямую связаны между собой. Например, операция заканчивается неудачей в результате сбоя при расшифровывании сообщения. Трассировки операции и расшифровывания сообщения появляются в том же действии и показывают прямую связь между ошибкой расшифровывания и ошибкой запроса.
Настройка трассировки действий
WCF предоставляет предварительно определенные действия для обработки операций приложений (см. раздел Список действий). Кроме того, действия можно определить программно для группирования пользовательских трассировок. Дополнительные сведения см. в разделе Создание трассировки пользовательского кода.
Чтобы создать трассировки действия во время выполнения, используйте параметр ActivityTracing для источника трассировки System.ServiceModel либо другие источники трассировки WCF или пользовательские источники трассировки, как показано в следующем примере кода конфигурации.
<source name="System.ServiceModel" switchValue="Verbose,ActivityTracing">
Дополнительные сведения об элементе конфигурации и используемых атрибутах см. в разделе Настройка трассировки.
Просмотр действий
Действия и сведения об их использовании можно просматривать в Программа Service Trace Viewer (SvcTraceViewer.exe). Если функция ActivityTracing включена, данное средство сортирует трассировки на основе действий. Также можно просматривать перенаправления трассировок. Перенаправление трассировки показывает, как различные действия связаны между собой. Таким образом, можно увидеть, какие действия приводят к запуску других действий. Например, запрос сообщения привел к запуску процедуры подтверждения для получения маркера безопасного диалога.
Корреляция действия в программе Service Trace Viewer
В программе Service Trace Viewer предусмотрено два представления действий.
Список. Идентификатор действия используется для непосредственной корреляции трассировок из различных процессов. Трассировки, происходящие из различных процессов (например, из клиента и службы), но имеющие один и тот же идентификатор действия, группируются в одном действии. Поэтому ошибка службы и вызванная ей ошибка на клиенте будут отображены в программе в одном представлении действий.
График. Действия группируются по процессам. В этом представлении трассировки клиента и службы с одинаковым идентификатором действия находятся в различных действиях. Для корреляции действий с одинаковым идентификатором в различных процессах программа отображает потоки сообщений в связанных действиях.
Дополнительные сведения о программе Service Trace Viewer и графическом представлении см. в разделах Программа Service Trace Viewer (SvcTraceViewer.exe) и Использование программы Service Trace Viewer для просмотра скоррелированных трассировок и устранения неполадок.
Определение области действия
Действие определяется во время проектирования и обозначает логический блок обработки. Созданные трассировки с одинаковым идентификатором действия являются связанными напрямую; они представляют собой часть одного действия. Поскольку действие может пересекать границы конечной точки (например, запрос), для действия определяются две области.
Область Global для каждого приложения. В этой области действие определяется 128-разрядным глобальным уникальным идентификатором действия, gAId. Идентификатор gAid распространяется на конечные точки.
Область Local для каждой конечной точки. В этой области действие определяется своим идентификатором gAId, а также именем источника трассировки, создающего трассировки действий, и идентификатором процесса. Эти три значения составляют идентификатор локального действия, lAId. Идентификатор lAId используется для определения (локальных) границ действия.
Схема трассировки
Трассировки можно создавать с использованием любой схемы и для различных платформ Майкрософт. Наиболее распространенной является схема "e2e". Эта схема включает 128-разрядный идентификатор (gAId), имя источника трассировки и идентификатор процесса. В управляемом коде XmlWriterTraceListener создает трассировки по схеме E2E.
Разработчики могут задать идентификатор AID, который создается вместе с трассировкой, путем задания свойства 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 для явной пометки границ времени существования действия.
Запуск. Обозначает начало действия. Трассировка «Запуск» предоставляет запись о начале нового этапа обработки. В ней содержится новый идентификатор действия для заданного источника трассировки в заданном процессе, кроме случая распространения идентификатора действия на конечные точки, в котором наблюдается одна трассировка «Запуск» для каждой конечной точки. Примером запуска нового действия является создание нового потока для обработки или нового открытого метода.
Остановка. Обозначает конец действия. Трассировка «Остановка» предоставляет запись о завершении существующего этапа обработки. В ней содержится существующий идентификатор действия для заданного источника трассировки в заданном процессе, кроме случая распространения идентификатора действия на конечные точки, в котором наблюдается одна трассировка «Остановка» для каждой конечной точки. Примером остановки действия является завершение потока обработки или выход из метода, начало которого было обозначено трассировкой «Запуск».
Приостановка. Обозначает приостановку обработки действия. В трассировке «Приостановка» содержится идентификатор существующего действия, возобновление которого ожидается через некоторое время. Между событиями «Приостановка» и «Возобновление» никакие трассировки из источника трассировки не создаются. Примером является приостановка действия при вызове внешней функции библиотеки или при ожидании ресурса, такого как порт завершения ввода-вывода.
Возобновление. Обозначает продолжение обработки действия. В трассировке «Возобновление» содержится идентификатор существующего действия, последней трассировкой (созданной из текущего источника трассировки) которого была трассировка «Приостановка». Примером является возврат после вызова внешней функции библиотеки или получение сигнала возобновления обработки от ресурса, такого как порт завершения ввода-вывода.
Перенаправление. Поскольку некоторые действия вызываются другими действиями или относятся к ним, действия могут связываться с другими действиями с помощью трассировок «Перенаправление». Трассировка перенаправления записывает непосредственное отношение одного действия к другому.
Трассировки «Запуск» и «Остановка» не являются критически важными для корреляции. Однако они могут способствовать повышению производительности, профилированию и проверке области действия.
Используя эти типы, средства могут оптимизировать журналы трассировки для поиска непосредственно связанных событий одного действия или событий в связанных действиях, если средство прослеживает трассировки перенаправления. Например, средства прекращают анализ журналов для заданного действия при обнаружении трассировки «Запуск» или «Остановка».
Эти типы трассировки можно также использовать для профилирования. Ресурсы, которые использовались в течение интервала, определенного маркерами запуска и остановки, представляют инклюзивное время действия, включающее содержащиеся логические действия. Разность интервалов времени между трассировками "Приостановка" и "Возобновление" представляет фактическое время действия.
Трассировку «Остановка» особенно полезно использовать для проверки области реализованных действий. Если некоторые трассировки обработки появляются после трассировки «Остановка», а не в рамках заданного действия, это может указывать на недоработку кода.
Рекомендации по использованию трассировки действий
Ниже представлены рекомендации по использованию трассировок ActivityTracing («Запуск», «Остановка», «Приостановка», «Возобновление» и «Перенаправление»).
Трассировка является направленным циклическим графом, а не деревом. Можно вернуть управление действию, которое породило заданное действие.
Действие обозначает границу обработки, что может быть существенным для администратора системы или для возможности поддержки.
Каждый метод WCF как на клиенте, так и на сервере ограничивается началом нового действия, затем (после выполнения работы) завершением нового действия и возвратом к внешнему действию.
Долго выполняющиеся (текущие) действия, такие как прослушивание соединений или ожидание сообщений, представляются соответствующими маркерами запуска и остановки.
Действия, инициируемые получением или обработкой сообщения, представляются границами трассировки.
Действия представляют действия, а не обязательно объекты. Действие должно интерпретироваться как «это происходило, когда . . . (была создана существенная трассировка)».
См. также
Основные понятия
Настройка трассировки
Использование программы Service Trace Viewer для просмотра скоррелированных трассировок и устранения неполадок
Сценарии сквозной трассировки
Программа Service Trace Viewer (SvcTraceViewer.exe)
Создание трассировки пользовательского кода