Использование программы Service Trace Viewer для просмотра скоррелированных трассировок и устранения неполадок
В этом разделе описываются формат данных трассировки, способ просмотра этих данных, а также подходы, в которых используется программа Service Trace Viewer для устранения неполадок приложения.
Использование программы Service Trace Viewer
Программа Service Trace Viewer системы Windows Communication Foundation (WCF) помогает сопоставлять диагностические трассировки, создаваемые прослушивателями WCF, для выявления основной причины ошибки. Эта программа позволяет легко просматривать, группировать и фильтровать трассировки в целях диагностики, устранения и проверки неисправностей, связанных со службами WCF. Дополнительные сведения об использовании этой программы см. в разделе Программа Service Trace Viewer (SvcTraceViewer.exe).
В этом разделе содержатся снимки экранов трассировок, созданные при выполнении образца Трассировка и ведение журнала сообщений и просмотре с помощью программы Программа Service Trace Viewer (SvcTraceViewer.exe). Показывается, как интерпретировать содержимое трассировки, действия и взаимосвязь между ними, а также как анализировать большое количество трассировок при устранении неполадок.
Просмотр содержимого трассировки
Событие трассировки содержит следующие наиболее важные сведения:
имя действия, если задано;
время создания;
уровень трассировки;
имя источника трассировки;
имя процесса;
идентификатор потока;
уникальный идентификатор трассировки, которым является URL-адрес, указывающий целевой объект в библиотеке MSDN в Интернете, из которой можно получить дополнительные данные, связанные с трассировкой.
Все эти сведения можно увидеть в верхней правой панели программы Service Trace Viewer или в разделе Основные сведения форматированного представления нижней правой панели при выборе трассировки.
Примечание |
---|
Если клиент и служба установлены на одном и том же компьютере, то будут присутствовать трассировки для обоих приложений. Их можно отфильтровать по столбцу Имя процесса. |
Кроме того, в форматированном представлении отображаются также описание трассировки и дополнительные подробные сведения, если они доступны. Дополнительные подробные сведения могут включать тип и сообщение исключения, стеки вызовов, действие сообщения, поля «от/к» и другую информацию об исключении.
В представлении XML имеются следующие важные теги xml.
<SubType> (уровень трассировки).
<TimeCreated>.
<Source> (имя источника трассировки).
<Correlation> (идентификатор действия, заданный при создании трассировки).
<Execution> (процесс и идентификатор потока).
<Computer>.
<ExtendedData>, включая <Action>, <MessageID> и <ActivityId>, заданные в заголовке сообщения при отправке сообщения.
При анализе трассировки «Передано сообщение по каналу» отображаются следующие сведения.
<E2ETraceEvent xmlns="https://schemas.microsoft.com/2004/06/E2ETraceEvent">
<System xmlns="https://schemas.microsoft.com/2004/06/windows/eventlog/system">
<EventID>262163</EventID>
<Type>3</Type>
<SubType Name="Information">0</SubType>
<Level>8</Level>
<TimeCreated SystemTime="2006-08-04T18:45:30.8491051Z" />
<Source Name="System.ServiceModel" />
<Correlation ActivityID="{27c6331d-8998-43aa-a382-03239013a6bd}"/>
<Execution ProcessName="client" ProcessID="1808" ThreadID="1" />
<Channel />
<Computer>TEST1</Computer>
</System>
<ApplicationData>
<TraceData>
<DataItem>
<TraceRecord xmlns="https://schemas.microsoft.com/2004/10/E2ETraceEvent/TraceRecord" Severity="Information">
<TraceIdentifier>https://msdn.microsoft.com/ru-RU/library/System.ServiceModel.Channels.MessageSent.aspx</TraceIdentifier>
<Description>Sent a message over a channel.</Description>
<AppDomain>client.exe</AppDomain>
<Source>System.ServiceModel.Channels.ClientFramingDuplexSessionChannel/35191196</Source>
<ExtendedData xmlns="https://schemas.microsoft.com/2006/08/ServiceModel/MessageTransmitTraceRecord">
<MessageProperties>
<AllowOutputBatching>False</AllowOutputBatching>
</MessageProperties>
<MessageHeaders>
<Action d4p1:mustUnderstand="1" xmlns:d4p1="http://www.w3.org/2003/05/soap-envelope" xmlns="http://www.w3.org/2005/08/addressing">http://Microsoft.ServiceModel.Samples/ICalculator/Multiply</Action>
<MessageID xmlns="http://www.w3.org/2005/08/addressing">urn:uuid:7c6670d8-4c9c-496e-b6a0-2ceb6db35338</MessageID>
<ActivityId CorrelationId="b02e2189-0816-4387-980c-dd8e306440f5" xmlns="https://schemas.microsoft.com/2004/09/ServiceModel/Diagnostics">27c6331d-8998-43aa-a382-03239013a6bd</ActivityId>
<ReplyTo xmlns="http://www.w3.org/2005/08/addressing">
<Address>http://www.w3.org/2005/08/addressing/anonymous</Address>
</ReplyTo>
<To d4p1:mustUnderstand="1" xmlns:d4p1="http://www.w3.org/2003/05/soap-envelope" xmlns="http://www.w3.org/2005/08/addressing">net.tcp://localhost/servicemodelsamples/service</To>
</MessageHeaders>
<RemoteAddress>net.tcp://localhost/servicemodelsamples/service</RemoteAddress>
</ExtendedData>
</TraceRecord>
</DataItem>
</TraceData>
</ApplicationData>
</E2ETraceEvent>
Трассировка ServiceModel E2E
Когда для источника трассировки System.ServiceModel задано значение switchValue, отличное от Off и ActivityTracing, WCF создает действия и перенаправления для обработки WCF.
Действие — это логический блок обработки, объединяющий все связанные с ним трассировки. Например, для каждого запроса можно определить одно действие. Перенаправления создают причинно-следственную связь между действиями внутри конечных точек. Распространение идентификатора действия позволяет соотносить действия в разных конечных точках. Это можно сделать, задав propagateActivity=true в конфигурации в каждой конечной точке. Действия, перенаправления и распространение позволяют выполнить корреляцию ошибок. Это ускоряет выявление основной причины ошибки.
На клиенте для каждого вызова объектной модели создается одно действие WCF (например, Open ChannelFactory, Add, Divide и т. д.). Каждый вызов операции обрабатывается в действии Process Action.
На левой панели приведенного ниже снимка экрана, полученного из образца Трассировка и ведение журнала сообщений, отображается список созданных в клиентском процессе действий, отсортированных по дате создания. Ниже приведен хронологический список действий.
Создана фабрика каналов (ClientBase).
Открыта фабрика каналов.
Обработано действие Add.
Установлен безопасный сеанс (это ПРОИЗОШЛО по первому запросу) и обработаны три ответных сообщения инфраструктуры безопасности: RST, RSTR, SCT (Process message 1, 2, 3).
Обработаны запросы "Вычесть", "Умножить" и "Разделить".
Закрыта фабрика каналов, в результате чего закрыт безопасный сеанс и обработана отмена ответа на сообщение безопасности.
Сообщения инфраструктуры безопасности видны из-за привязки wsHttpBinding.
Примечание |
---|
В WCF показываются ответные сообщения, первоначально обрабатываемые в отдельном действии (Process message) до их корреляции посредством перенаправления с соответствующим действием Process Action, которое включает сообщение запроса. Это происходит для сообщений инфраструктуры и асинхронных запросов из-за необходимости проверки сообщения, чтения заголовка с идентификатором activityId и идентификации существующего действия Process Action с помощью этого идентификатора для корреляции с ним. Для синхронных запросов ответ блокируется и поэтому известно, к какому действию Process Action относится ответ. |
Когда на левой панели выбирается действие, на верхней правой панели отображаются вложенные действия и трассировки, т. е. это уменьшенное иерархическое представление списка действий слева на основе выбранного родительского действия. Поскольку первым сделанным запросом является выбранное действие Process action Add, это действие содержит действие Set Up Secure Session (перенаправление в, перенаправление назад от) и трассировки фактической обработки действия Add.
Если в левой панели дважды щелкнуть действие Process action Add отобразится графическое представление клиентских действий WCF, связанных с действием Add. Первое действие слева — это корневое действие (0000), являющееся действием по умолчанию. WCF выполняет перенаправление из внешнего действия. Если оно не определено, WCF выполняет перенаправление из 0000. В данном случае второе действие, Process Action Add, выполняет перенаправление из действия 0. Затем следует действие Setup Secure Session.
На верхней правой панели отображаются все трассировки, связанные с действием Process Action Add. В частности, передано сообщение запроса ("Передано сообщение по каналу") и в том же действии принят ответ ("Получено сообщение по каналу"). Это показано на следующей диаграмме. Для ясности действие Set up Secure Session на диаграмме свернуто.
Здесь трассировки клиента загружены только для ясности, а трассировки службы (полученное сообщение запроса и переданное ответное сообщение) появляются в том же действии, если они также загружены в программе и для propagateActivity было задано значение true. Это показано на иллюстрации, приведенной позже.
Для службы модель действий сопоставляется с концепциями WCF следующим образом.
Создается и открывается ServiceHost (при этом может создаваться несколько действий, связанных с основным приложением, например, в случае использования средств обеспечения безопасности).
Создается действие Listen At для каждого прослушивателя в ServiceHost (с перенаправлениями в действие Open ServiceHost и из этого действия).
Когда прослушиватель обнаруживает запрос взаимодействия, инициированный клиентом, он выполняет перенаправление в действие Receive Bytes, в котором обрабатываются все байты, переданные от клиента. В этом действии можно увидеть любые ошибки соединения, которые произошли во время взаимодействия между клиентом и службой.
Для каждого полученного набора байтов, соответствующего сообщению, байты обрабатываются в действии Process Message, где создается объект сообщения WCF. В этом действии отображаются ошибки, связанные с неправильным конвертом или неверно сформированным сообщением.
Когда сообщение сформировано, выполняется перенаправление в действие Process Action. Если для propagateActivity задано значение true и на клиенте, и в службе, это действие имеет тот же идентификатор, что определен в клиенте и описан ранее. Начиная с этого момента, извлекается выгода благодаря непосредственной корреляции через конечные точки, поскольку все созданные в WCF трассировки, которые связаны с запросом, находятся в одном и том же действии, включая обработку ответного сообщения.
Для внепроцессного действия создается действие "Execute user code", чтобы изолировать трассировки, созданные в пользовательском коде, от трассировок, созданных в WCF. В предыдущем примере трассировка "Служба передает ответ на действие Add" создается в действии "Execute User code", а не в действии, распространяемом клиентом, если это применимо.
На приведенной ниже иллюстрации первое действие слева — корневое действие (0000), являющееся действием по умолчанию. Следующие три действия предназначены для того, чтобы открыть ServiceHost. Действие в столбце 5 — прослушиватель, а остальные действия (6 – 8) описывают обработку сообщения системой WCF — от обработки байтов до активации пользовательского кода.
На следующем снимке экрана показаны действия для клиента и службы и выделено действие Process Action Add во всех процессах (оранжевым цветом). Стрелки связывают сообщения запроса и ответа, отправленные и полученные клиентом и службой. Трассировки действия Process Action разделены в процессах на диаграмме, но в верхней правой панели показаны как часть одного действия. В этой панели отображаются трассировки клиента для отправленных сообщений, после которых следуют трассировки службы для полученных и обработанных сообщений.
В следующем сценарии с ошибками соотносятся трассировки ошибок и предупреждений в службе и на клиенте. Сначала вызывается исключение в пользовательском коде службы (крайнее правое зеленое действие, которое включает трассировку предупреждений для исключения "Служба не может обработать этот запрос в пользовательском коде"). Когда клиенту отправляется ответ, снова создается трассировка предупреждений, чтобы указать на наличие сообщения о сбое (розовое действие слева). Затем клиент закрывает свой клиент WCF (желтое действие внизу слева), в результате чего соединение со службой прерывается. Служба вызывает ошибку (самое длинное розовое действие справа).
Образец, использованный для создания этих трассировок, представляет собой последовательность синхронных запросов, использующих привязку wsHttpBinding. Для сценариев без обеспечения безопасности или с асинхронными запросами, где действие Process Action выполняет операции начала и окончания, составляющие асинхронный вызов, и показывает перенаправления в действие обратного вызова, диаграмма будет несколько иной. Дополнительные сведения о дополнительных сценариях см. в разделе Сценарии сквозной трассировки.
Выявление неполадок с помощью программы Service Trace Viewer
При загрузке файлов трассировки в программу Service Trace Viewer можно выбрать любое красное или желтое действие на левой панели, чтобы выявить причину неполадки в приложении. Действие 000 обычно имеет необработанные исключения, которые достигают пользователя.
На верхней правой панели можно проанализировать трассировки, связанные с действием, выбранным на левой панели. Затем можно просмотреть красные или желтые трассировки в этой панели и увидеть, как они коррелируются. На приведенной выше диаграмме видны трассировки предупреждений для клиента и службы в одном действии Process Action.
Если эти трассировки не позволяют выяснить основную причину ошибки, можно использовать диаграмму, дважды щелкнув выбранное действие на левой панели (здесь Process Action). При этом отображается диаграмма со связанными действиями. Можно развернуть связанные действия (щелкнув символы "+"), чтобы найти первую созданную трассировку, выделенную красным или желтым цветом, в связанном действии. Сохраняйте развернутыми действия, которые произошли непосредственно перед представляющей интерес красной или желтой трассировкой, следя за перенаправлениями в связанные действия или потоками сообщений через конечные точки, пока не выясните основную причину неполадки.
Если трассировка ActivityTracing ServiceModel отключена, а трассировка ServiceModel включена, можно увидеть трассировки ServiceModel, созданные в действии 0000. Однако в этом случае требуется больше усилий, чтобы понять корреляцию этих трассировок.
Если включено ведение журнала сообщений, можно использовать вкладку сообщений, чтобы увидеть, на какое сообщение повлияла ошибка. При двойном щелчке красного или желтого сообщения появляется графическое представление связанных действий. Эти действия наиболее тесно связаны с запросом, где произошла ошибка.
См. также
Основные понятия
Сценарии сквозной трассировки
Программа Service Trace Viewer (SvcTraceViewer.exe)