Compartilhar via


Utilizando o visualizador de rastreamento de serviço para visualização de rastreamento correlacionados e soluções de problemas

Este tópico descreve o formato dos dados de rastreamento, como exibi-los e abordagens que usam o Visualizador de Rastreamento de Serviço para solucionar problemas do aplicativo.

Usando a ferramenta Visualizador de Rastreamento de Serviço

A ferramenta Visualizador de Rastreamento de Serviço do WCF (Windows Communication Foundation) ajuda você a correlacionar os rastreamentos de diagnóstico produzidos pelos ouvintes do WCF para localizar a causa raiz de um erro. A ferramenta oferece uma forma de exibir, agrupar e filtrar rastreamentos para que você possa diagnosticar, reparar e verificar problemas com os serviços WCF. Para obter mais informações sobre como usar essa ferramenta, confira Ferramenta Visualizador de Rastreamento de Serviço (SvcTraceViewer.exe).

Este tópico contém capturas de tela de rastreamentos gerados pela execução da amostra Rastreamento e registro em log de mensagens, quando exibido usando a Ferramenta Visualizador de Rastreamento de Serviço (SvcTraceViewer.exe). Este tópico demonstra como entender o conteúdo de rastreamento, as atividades e sua correlação e como analisar um grande número de rastreamentos ao solucionar problemas.

Exibir conteúdo de rastreamento

Um evento de rastreamento contém as seguintes informações mais significativas:

  • Nome da atividade quando definido.

  • Tempo de emissão.

  • Nível de rastreamento.

  • Nome da origem do rastreamento.

  • Nome do processo.

  • ID de thread.

  • Um identificador de rastreamento exclusivo, que é uma URL que aponta para uma referência técnica da Microsoft e fornece mais informações relacionadas ao rastreamento.

Tudo isso pode ser visto no painel superior direito no Visualizador de Rastreamento de Serviço ou na seção Informações básicas no modo de exibição formatado do painel inferior direito ao selecionar um rastreamento.

Observação

Se o cliente e o serviço estiverem no mesmo computador, os rastreamentos de ambos os aplicativos estarão presentes. Eles podem ser filtrados usando a coluna Nome do Processo.

Além disso, a exibição formatada também fornece uma descrição para o rastreamento e informações detalhadas adicionais quando disponível. Este último pode incluir tipo de exceção e mensagem, pilhas de chamadas, ação de mensagem, campos de/para e outras informações de exceção.

No modo de exibição XML, as tags xml úteis incluem o seguinte:

  • <SubType> (nível de rastreamento).

  • <TimeCreated>.

  • <Source> (nome da origem do rastreamento).

  • <Correlation> (id de atividade definida ao emitir o rastreamento).

  • <Execution> (id de processo e thread).

  • <Computer>.

  • <ExtendedData>, incluindo <Action>, <MessageID> e <ActivityId> definido no cabeçalho da mensagem ao enviar uma mensagem.

Se você examinar o rastreamento "Enviou uma mensagem por um canal", poderá ver o conteúdo a seguir.

<E2ETraceEvent xmlns="http://schemas.microsoft.com/2004/06/E2ETraceEvent">
   <System xmlns="http://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="{bbbb1111-cc22-3333-44dd-555555eeeeee}"/>
       <Execution ProcessName="client" ProcessID="1808" ThreadID="1" />
       <Channel />
       <Computer>TEST1</Computer>
   </System>
   <ApplicationData>
       <TraceData>
          <DataItem>
             <TraceRecord xmlns="http://schemas.microsoft.com/2004/10/E2ETraceEvent/TraceRecord" Severity="Information">
                 <TraceIdentifier>http://msdn.microsoft.com/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="http://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="aaaa0000-bb11-2222-33cc-444444dddddd" xmlns="http://schemas.microsoft.com/2004/09/ServiceModel/Diagnostics">bbbb1111-cc22-3333-44dd-555555eeeeee</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>

Rastreamento E2E do ServiceModel

Quando a System.ServiceModelorigem do rastreamento é definida com um switchValue diferente de Off e ActivityTracing, o WCF cria atividades e transferências para processamento do WCF.

Uma atividade é uma unidade lógica de processamento que agrupa todos os rastreamentos relacionados a essa unidade de processamento. Por exemplo, você pode definir uma atividade para cada solicitação. As transferências criam uma relação causal entre atividades dentro de pontos de extremidade. A propagação da ID da atividade permite relacionar atividades entre pontos de extremidade. Isso pode ser feito definindo propagateActivity=true na configuração em cada ponto de extremidade. Atividades, transferências e propagação permitem que você execute a correlação de erro. Dessa forma, você pode encontrar a causa raiz de um erro mais rapidamente.

No cliente, uma atividade do WCF é criada para cada chamada de modelo de objeto (por exemplo, Open ChannelFactory, Add, Divide e assim por diante.) Cada uma das chamadas de operação é processada em uma atividade "Ação de Processo".

Na captura de tela a seguir, extraída do exemplo Rastreamento e registro em log de mensagens, o painel esquerdo exibe a lista de atividades criadas no processo do cliente, classificadas pelo tempo de criação. Confira abaixo uma lista cronológica de atividades:

  • Construiu a fábrica de canais (ClientBase).

  • Abriu a fábrica de canais.

  • Processou a ação Add.

  • Configurou a Sessão Segura (isso ocorreu na primeira solicitação) e processou três mensagens de resposta da infraestrutura de segurança: RST, RSTR, SCT (Mensagem de processo 1, 2, 3).

  • Processou as solicitações Subtract, Multiply e Divide.

  • Encerrou a fábrica de canais e, ao fazê-lo, encerrou a Sessão Segura e processou a resposta da mensagem de segurança Cancel.

Vemos as mensagens de infraestrutura de segurança devido ao wsHttpBinding.

Observação

No WCF, mostramos mensagens de resposta sendo processadas inicialmente em uma atividade separada (mensagem de processo) antes de correlacionarmos elas à atividade de Ação de Processo correspondente que inclui a mensagem de solicitação, por meio de uma transferência. Isso ocorre para mensagens de infraestrutura e solicitações assíncronas e se deve ao fato de que devemos inspecionar a mensagem, ler o cabeçalho activityId e identificar a atividade Ação de Processo existente com essa ID para correlacionar a ela. Para solicitações síncronas, estamos bloqueando a resposta e, portanto, sabemos à qual ação Process a resposta está relacionada.

A seguinte imagem mostra as atividades do cliente WCF listadas pelo tempo de criação (painel esquerdo) e suas atividades aninhadas e rastreamentos (painel superior direito):

Screenshot showing WCF client activities listed by creation time.

Quando selecionamos uma atividade no painel esquerdo, podemos ver atividades aninhadas e rastreamentos no painel superior direito. Portanto, essa é uma exibição hierárquica reduzida da lista de atividades à esquerda, com base na atividade pai selecionada. Como a ação Add do Process selecionada é a primeira solicitação feita, essa atividade contém a atividade Set Up Secure Session (transferir para, transferir de volta de) e rastreamentos para o processamento real da ação Add.

Se clicarmos duas vezes na atividade Add da ação Process no painel esquerdo, poderemos ver uma representação gráfica das atividades do WCF do cliente relacionadas à Add. A primeira atividade à esquerda é a atividade raiz (0000), que é a atividade padrão. O WCF é transferido da atividade de ambiente. Se isso não estiver definido, o WCF será transferido de 0000. Aqui, a segunda atividade, Process Action Add, é transferida de 0. Vemos Setup Secure Session.

A seguinte imagem mostra uma exibição de grafo das atividades do cliente do WCF, especificamente Atividade Ambiente (aqui 0), ação Process e Set Up Secure Session:

Graph in the Trace Viewer showing Ambient Activity and Process action.

No painel superior direito, podemos ver todos os rastreamentos relacionados à atividade Process Action Add. Especificamente, enviamos a mensagem de solicitação ("Enviou uma mensagem por um canal") e recebemos a resposta ("Recebemos uma mensagem por um canal") na mesma atividade. Isso é mostrado no grafo a seguir. Para maior clareza, a atividade Set Up Secure Session está recolhida no grafo.

A imagem a seguir mostra uma lista de rastreamentos para a atividade Process Action. Enviamos a solicitação e recebemos a resposta na mesma atividade.

Screenshot of Trace Viewer showing a list of traces for the Process Action activity

Aqui, carregamos rastreamentos do cliente apenas para maior clareza, mas os rastreamentos de serviço (mensagem de solicitação recebida e mensagem de resposta enviada) aparecerão na mesma atividade se eles também forem carregados na ferramenta e propagateActivity foi definido como true.. Isso será mostrado em uma ilustração posterior.

No serviço, o modelo de atividade é mapeado para os conceitos do WCF da seguinte maneira:

  1. Criamos e abrimos um ServiceHost (isso pode criar várias atividades relacionadas ao host, por exemplo, no caso da segurança).

  2. Criamos uma atividade Listen At para cada ouvinte no ServiceHost (com transferências de entrada e saída do Open ServiceHost).

  3. Quando o ouvinte detecta uma solicitação de comunicação iniciada pelo cliente, ele é transferido para uma atividade "Receive Bytes", na qual todos os bytes enviados do cliente são processados. Nessa atividade, podemos ver todos os erros de conexão que ocorreram durante a interação cliente-serviço.

  4. Para cada conjunto de bytes recebidos que corresponde a uma mensagem, processamos esses bytes em uma atividade "Process Message", em que criamos o objeto WCF Message. Nessa atividade, vemos erros relacionados a um envelope inválido ou a uma mensagem malformada.

  5. Depois que a mensagem for formada, transferiremos para uma atividade Process Action. Se propagateActivity estiver definido como true no cliente e no serviço, essa atividade terá a mesma ID definida no cliente e descrita anteriormente. Nesse estágio, começamos a nos beneficiar da correlação direta entre pontos de extremidade, pois todos os rastreamentos emitidos no WCF relacionados à solicitação estão nessa mesma atividade, incluindo o processamento da mensagem de resposta.

  6. Para uma ação fora do processo, criamos uma atividade "Execute user code" para isolar rastreamentos emitidos no código do usuário daqueles emitidos no WCF. No exemplo anterior, o rastreamento "Service sends Add response" é emitido na atividade "Execute User code", não na atividade propagada pelo cliente, se aplicável.

Na ilustração a seguir, a primeira atividade à esquerda é a atividade raiz (0000), que é a atividade padrão. As próximas três atividades são para abrir o ServiceHost. A atividade na coluna 5 é o ouvinte e as atividades restantes (6 a 8) descrevem o processamento do WCF de uma mensagem, desde o processamento de bytes até a ativação do código do usuário.

A seguinte imagem mostra uma exibição de grafo das atividades de serviço do WCF:

Screenshot of Trace Viewer showing a list of WCF service activities

A captura de tela a seguir mostra as atividades do cliente e do serviço e realça a atividade Process Action Add entre processos (laranja). As setas relacionam as mensagens de solicitação e resposta enviadas e recebidas pelo cliente e pelo serviço. Os rastreamentos de Process Action são separados entre processos no grafo, mas mostrados como parte da mesma atividade no painel superior direito. Neste painel, podemos ver rastreamentos do cliente para mensagens enviadas seguidos por rastreamentos de serviço para mensagens recebidas e processadas.

As imagens a seguir mostram uma exibição de grafo das atividades de cliente e serviço do WCF

Graph from Trace Viewer that shows both WCF client and service activities.

No cenário de erro a seguir, os rastreamentos de erro e aviso no serviço e no cliente estão relacionados. Uma exceção é lançada primeiro no código do usuário no serviço (atividade verde à direita que inclui um rastreamento de aviso para a exceção "O serviço não pode processar essa solicitação no código do usuário."). Quando a resposta é enviada ao cliente, um rastreamento de aviso é emitido novamente para indicar a mensagem de falha (atividade rosa esquerda). O cliente fecha seu cliente WCF (atividade amarela no lado inferior esquerdo), o que anula a conexão com o serviço. O serviço lança um erro (atividade rosa mais longa à direita).

Using the Trace Viewer

Correlação de erro entre serviço e cliente

A amostra usada para gerar esses rastreamentos é uma série de solicitações síncronas usando o wsHttpBinding. Há desvios desse grafo para cenários sem segurança ou com solicitações assíncronas, em que a atividade Process Action abrange as operações de início e término que constituem a chamada assíncrona e mostra transferências para uma atividade de retorno de chamada. Para obter mais informações sobre cenários adicionais, confira Cenários de rastreamento de ponta a ponta.

Solução de problemas usando o Visualizador de Rastreamento de Serviço

Ao carregar arquivos de rastreamento na ferramenta Visualizador de Rastreamento de Serviço, você poderá selecionar qualquer atividade vermelha ou amarela no painel esquerdo para rastrear a causa de um problema em seu aplicativo. A atividade 000 normalmente tem exceções sem tratamento que aparecem para o usuário.

A imagem a seguir mostra como selecionar uma atividade vermelha ou amarela para localizar a raiz de um problema. Screenshot of red or yellow activities for locating the root of a problem.

No painel superior direito, você pode examinar os rastreamentos da atividade selecionada à esquerda. Você pode examinar os rastreamentos vermelhos ou amarelos nesse painel e ver como eles estão correlacionados. No grafo anterior, vemos rastreamentos de aviso para o cliente e o serviço na mesma atividade Process Action.

Se esses rastreamentos não fornecerem a causa raiz do erro, você poderá utilizar o grafo clicando duas vezes na atividade selecionada no painel esquerdo (aqui, a ação Process). O grafo com as atividades relacionadas é exibido. Você pode expandir as atividades relacionadas (clicando nos sinais "+") para localizar o primeiro rastreamento emitido em vermelho ou amarelo em uma atividade relacionada. Continue expandindo as atividades que ocorreram pouco antes do rastreamento de interesse vermelho ou amarelo, após transferências para atividades relacionadas ou fluxos de mensagens entre pontos de extremidade, até que você acompanhe a causa raiz do problema.

Using the Trace Viewer

Expandir atividades para acompanhar a causa raiz de um problema

Se ServiceModel ActivityTracing estiver desativado, mas o rastreamento ServiceModel estiver ativado, você poderá ver rastreamentos ServiceModel emitidos na atividade 0000. No entanto, isso requer mais esforço para entender a correlação desses rastreamentos.

Se o Log de Mensagens estiver habilitado, você poderá usar a Guia Mensagem para ver qual mensagem é afetada pelo erro. Ao clicar duas vezes em uma mensagem em vermelho ou amarelo, você poderá ver a exibição de grafo das atividades relacionadas. Essas atividades são as mais relacionadas à solicitação em que ocorreu um erro.

Screenshot of Trace Viewer with message logging enabled.

Para iniciar a solução de problemas, você também poderá escolher um rastreamento de mensagem vermelho ou amarelo e clicar duas vezes nele para rastrear a causa raiz.

Confira também