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


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

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

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

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

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

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

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

  1. Откройте средство просмотра событий. Для этого нажмите кнопку Пуск, выберите команду Выполнить и введите eventvwr.exe.

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

  3. Откройте образец, созданный в разделе Учебник по началу работы, в Visual Studio 2010. Обратите внимание, что для создания службы необходимо запустить Visual Studio 2010 в качестве администратора. Если установлены образцы WCF, можно открыть образец Образец для начала работы, который содержит выполненный проект, созданный в учебнике.

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

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

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

  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}" />
    
    Ff477602.note(ru-ru,VS.100).gifПримечание
    Все события с одним и тем же идентификатором GUID в поле ActivityID (идентификатора действия) относятся к одному запросу. Это позволяет сопоставлять сообщения от конкретного клиента определенной службе. Если один клиент вызывает другую службу, то этого клиента можно определить по ActivityID.

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

    <Event xmlns="https://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>
    
    Ff477602.note(ru-ru,VS.100).gifПримечание
    Событие передачи фиксирует изменение активного ActivityID с GUID, указанного в качестве ActivityID, на GUID, указанный в качестве RelatedActivityID. После выдачи события передачи все последующие события будут содержать новый GUID в качестве ActivityID.