Общие сведения о потоках сообщений
В распределенной системе со связанными между собой службами необходимо определять причинные взаимоотношения между службами. Понимать, какие из различных компонентов входили в путь потока запроса, необходимо для решения таких важнейших задач, как наблюдения за работоспособностью, устранение неполадок и анализ первопричин. Для поддержки трассировки в различных службах в .NET Framework 4 была добавлена поддержка следующих функций.
Аналитическая трассировка: высокопроизводительная функция трассировки с низкой детализацией, использующая средство отслеживания событий для Windows (ETW).
Сквозная модель действий для служб WCF/WF: эта функция поддерживает корреляцию трассировок, создаваемых пространствами имен System.ServiceModel и System.WorkflowModel.
Трассировка событий Windows для WF: эта функция использует записи трассировки, создаваемые службами WF, для обеспечения видимости текущего состояния и хода выполнения рабочего процесса.
Ошибки, зарегистрированные в сеансе отслеживания или трассировки, позволяют находить дефекты кода или неверно сформированные сообщения. Свойство ActivityId узла Correlation в заголовке сообщения события может использоваться для нахождения сбойного действия. Описание включения отслеживания сообщений по идентификатору действия см. в разделе Настройка отслеживания потока сообщений. В этом разделе описывается включение трассировки потока сообщений в проекте, который был создан в учебнике «Приступая к работе».
Включение трассировки потока сообщений в проекте, который был создан в учебнике «Приступая к работе»
Откройте средство просмотра событий. Для этого нажмите кнопку Пуск, выберите команду Выполнить и введите eventvwr.exe.
Если не включено аналитическое отслеживание, разверните узлы Журналы приложений и служб, Microsoft, Windows, Сервер приложений — приложения. Установите в меню Вид флажок Отобразить аналитический и отладочный журналы. Щелкните правой кнопкой мыши пункт Аналитический и выберите команду Включить журнал. Оставьте средство просмотра событий открытым, чтобы можно было просматривать трассировки.
Откройте образец, созданный в разделе Учебник по началу работы, в Visual Studio 2010. Обратите внимание, что для создания службы необходимо запустить Visual Studio 2010 в качестве администратора. Если установлены образцы WCF, можно открыть образец Образец для начала работы, который содержит выполненный проект, созданный в учебнике.
Щелкните проект Service правой кнопкой мыши и выберите пункт Добавить, Новый элемент. Выберите Файл конфигурации приложения и нажмите кнопку ОК.
Добавьте следующий код в файл App.Config, созданный в предыдущем шаге.
<system.serviceModel> <diagnostics> <endToEndTracing propagateActivity="true" messageFlowTracing="true"/> </diagnostics> </system.serviceModel>
Выполните серверное приложение без отладки, нажав CTRL+F5. Запустите клиентский проект. Для этого щелкните правой кнопкой мыши проект Client и выберите команду Отладка > Запустить новый экземпляр.
Для трассировки событий от клиента на сервер добавьте в файл конфигурации приложения в проекте Client следующее.
<diagnostics> <endToEndTracing propagateActivity="true" messageFlowTracing="true"/> </diagnostics>
В файле Program.cs в клиенте добавьте следующий оператор Using.
using System.Diagnostics;
В методе Main файла program.cs клиентского проекта задайте распространение идентификатора GUID трассировки в журнале событий.
Guid guid = Guid.NewGuid(); Trace.CorrelationManager.ActivityId = guid;
Обновите и просмотрите журнал Аналитика. Найдите событие с идентификатором 220. Выберите событие и щелкните вкладку Сведения на панели предварительного просмотра. Это событие будет содержать идентификатор корреляции для вызывающего действия.
<Correlation ActivityID="{A066CCF1-8AB3-459B-B62F-F79F957A5036}" />
Примечание Все события с одним и тем же идентификатором GUID в поле ActivityID (идентификатора действия) относятся к одному запросу. Это позволяет сопоставлять сообщения от конкретного клиента определенной службе. Если один клиент вызывает другую службу, то этого клиента можно определить по ActivityID. В некоторых случаях 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>
Примечание Событие передачи фиксирует изменение активного ActivityID с GUID, указанного в качестве ActivityID, на GUID, указанный в качестве RelatedActivityID. После выдачи события передачи все последующие события будут содержать новый GUID в качестве ActivityID.