Общие сведения о потоках сообщений
В распределенной системе со связанными между собой службами необходимо определять причинные взаимоотношения между службами. Понимать, какие из различных компонентов входили в путь потока запроса, необходимо для решения таких важнейших задач, как наблюдения за работоспособностью, устранение неполадок и анализ первопричин. Для поддержки трассировки в различных службах в .NET Framework 4 была добавлена поддержка следующих функций.
Аналитическая трассировка: высокопроизводительная возможность трассировки с низкой детализацией, использующая средство отслеживания событий для Windows (ETW).
Сквозная модель действий для служб WCF/WF: эта возможность поддерживает корреляцию трассировок, создаваемых пространствами имен System.ServiceModel и System.Workflow.ComponentModel.
Трассировка событий Windows для WF: эта возможность использует записи трассировки, создаваемые службами WF, для обеспечения видимости текущего состояния и хода выполнения рабочего процесса.
Ошибки, зарегистрированные в сеансе отслеживания или трассировки, позволяют находить дефекты кода или неверно сформированные сообщения. Свойство ActivityId узла Correlation в заголовке сообщения события может использоваться для нахождения сбойного действия. Сведения о включении трассировки потока сообщений по идентификатору действия см. в разделе "Настройка трассировки потока сообщений". В этом разделе описывается включение трассировки потока сообщений в проекте, который был создан в учебнике «Приступая к работе».
Включение трассировки потока сообщений в проекте, который был создан в учебнике «Приступая к работе»
Откройте Просмотр событий, нажав кнопку "Пуск", "Запустить" и введите
eventvwr.exe
.Если вы не включили аналитику трассировки, разверните журналы приложений и служб, Microsoft, Windows, Application Server-Applications. Выберите представление, показать журналы аналитики и отладки. Щелкните правой кнопкой мыши "Аналитика" и выберите "Включить журнал". Оставьте средство просмотра событий открытым, чтобы можно было просматривать трассировки.
Откройте пример, созданный в руководстве по началу работы в Visual Studio 2012. Обратите внимание, что необходимо запустить Visual Studio 2012 от имени администратора, чтобы служба была создана. Если у вас установлены примеры WCF, откройте раздел "Начало работы", содержащий завершенный проект, созданный в руководстве.
Щелкните правой кнопкой мыши проект службы и выберите "Добавить", "Создать элемент". Выберите файл конфигурации приложения и нажмите кнопку "ОК".
Добавьте следующий код в файл App.Config, созданный в предыдущем шаге.
<system.serviceModel> <diagnostics> <endToEndTracing propagateActivity="true" messageFlowTracing="true"/> </diagnostics> </system.serviceModel>
Выполните серверное приложение без отладки, нажав CTRL+F5. Выполните клиентский проект, щелкнув правой кнопкой мыши проект клиента и выбрав "Отладка", "Запустить новый экземпляр".
Для трассировки событий от клиента на сервер добавьте в файл конфигурации приложения в проекте 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="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.