Общие сведения о потоках сообщений

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

  • Аналитическая трассировка: высокопроизводительная возможность трассировки с низкой детализацией, использующая средство отслеживания событий для Windows (ETW).

  • Сквозная модель действий для служб WCF/WF: эта возможность поддерживает корреляцию трассировок, создаваемых пространствами имен System.ServiceModel и System.Workflow.ComponentModel.

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

Ошибки, зарегистрированные в сеансе отслеживания или трассировки, позволяют находить дефекты кода или неверно сформированные сообщения. Свойство ActivityId узла Correlation в заголовке сообщения события может использоваться для нахождения сбойного действия. Сведения о включении трассировки потока сообщений по идентификатору действия см. в разделе "Настройка трассировки потока сообщений". В этом разделе описывается включение трассировки потока сообщений в проекте, который был создан в учебнике «Приступая к работе».

Включение трассировки потока сообщений в проекте, который был создан в учебнике «Приступая к работе»

  1. Откройте Просмотр событий, нажав кнопку "Пуск", "Запустить" и введите eventvwr.exe.

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

  3. Откройте пример, созданный в руководстве по началу работы в Visual Studio 2012. Обратите внимание, что необходимо запустить Visual Studio 2012 от имени администратора, чтобы служба была создана. Если у вас установлены примеры WCF, откройте раздел "Начало работы", содержащий завершенный проект, созданный в руководстве.

  4. Щелкните правой кнопкой мыши проект службы и выберите "Добавить", "Создать элемент". Выберите файл конфигурации приложения и нажмите кнопку "ОК".

  5. Добавьте следующий код в файл App.Config, созданный в предыдущем шаге.

    <system.serviceModel>
      <diagnostics>
        <endToEndTracing propagateActivity="true" messageFlowTracing="true"/>
      </diagnostics>
    </system.serviceModel>
    
  6. Выполните серверное приложение без отладки, нажав CTRL+F5. Выполните клиентский проект, щелкнув правой кнопкой мыши проект клиента и выбрав "Отладка", "Запустить новый экземпляр".

  7. Для трассировки событий от клиента на сервер добавьте в файл конфигурации приложения в проекте Client следующее.

    <diagnostics>
      <endToEndTracing propagateActivity="true" messageFlowTracing="true"/>
    </diagnostics>
    
  8. В файле Program.cs в клиенте добавьте следующий оператор Using.

    using System.Diagnostics;
    
  9. В методе Main файла program.cs клиентского проекта задайте распространение идентификатора GUID трассировки в журнале событий.

    Guid guid = Guid.NewGuid();
    Trace.CorrelationManager.ActivityId = guid;
    
  10. Обновите и проверьте журнал Аналитики. Найдите событие с идентификатором 220. Выберите событие и перейдите на вкладку "Сведения" в области предварительного просмотра. Это событие будет содержать идентификатор корреляции для вызывающего действия.

    <Correlation ActivityID="{A066CCF1-8AB3-459B-B62F-F79F957A5036}" />
    

    Примечание.

    Все события с одним и тем же идентификатором GUID в поле ActivityID (идентификатора действия) относятся к одному запросу. Это позволяет сопоставлять сообщения от конкретного клиента определенной службе. Если один клиент вызывает другую службу, то этого клиента можно определить по ActivityID.

  11. В некоторых случаях ActivityID может изменяться с исходного идентификатора GUID на новый ActivityID. В этом случае возникает событие передачи. У этого события будет идентификатор 499, а в заголовке события будут содержаться следующие данные.

    <Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
        <System>
            <Provider Name="Microsoft-Windows-Application Server-Applications" Guid="{c651f5f6-1c0d-492e-8ae1-b4efd7c9d503}" />
            <EventID>499</EventID>
            ...
            <Correlation ActivityID="{A066CCF1-8AB3-459B-B62F-F79F957A5036}" RelatedActivityID="{85FC0930-9C49-42DA-804B-A7368104BD1B}" />
            ...
       </System>
    </Event>
    

    Примечание.

    Событие передачи фиксирует изменение активного ActivityID с GUID, указанного в качестве ActivityID, на GUID, указанный в качестве RelatedActivityID. После выдачи события передачи все последующие события будут содержать новый GUID в качестве ActivityID.