Compartilhar via


Usando o Visualizador de Rastreamento de Serviço para exibir rastreamentos correlacionados e solução 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 de seu 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 rastreamentos de diagnóstico produzidos por ouvintes do WCF para localizar a causa raiz de um erro. A ferramenta oferece uma maneira de exibir, agrupar e filtrar facilmente rastreamentos para que você possa diagnosticar, reparar e verificar problemas com os serviços do WCF. Para obter mais informações sobre como usar essa ferramenta, consulte a 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 do thread.

  • Um identificador de rastreamento exclusivo, que é uma URL que aponta para uma referência técnica da Microsoft que 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. Elas podem ser filtradas 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. Ele pode incluir o tipo e a mensagem de exceção, pilhas de chamadas, ação da mensagem, campos de origem/destino e outras informações da exceção.

No modo de exibição XML, as marcas 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 dos endpoints. 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 erros. 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 de Rastreamento e Registro de Mensagens, o painel esquerdo exibe a lista de atividades criadas no processo do cliente, classificadas pelo tempo de criação. Veja a seguir uma lista cronológica de atividades:

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

  • Abriu a fábrica de canais.

  • Processou a ação Add.

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

  • Processou as solicitações Subtrair, Multiplicar e Dividir.

  • 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 de Ação do Processo existente com essa ID para correlacionar a ela. Para solicitações síncronas, estamos aguardando a resposta e, portanto, sabemos a qual ação de Processo 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):

Captura de tela mostrando as atividades do cliente do WCF listadas pelo tempo de criação.

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 principal 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 ação Processo Adicionar atividade no painel esquerdo, poderemos ver uma representação gráfica das atividades WCF do cliente relacionadas a Adicionar. 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. Em seguida, vemos a Configuração de Sessão Segura.

A imagem a seguir mostra uma exibição de gráfico das atividades do cliente do WCF, especificamente Atividade Ambiente (aqui 0), ação de processamento e configuração de sessão segura.

Grafo no Visualizador de Rastreamento mostrando a ação Ambient Activity and Process.

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 ("Recebi 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.

Captura de tela do Visualizador de Rastreamento mostrando uma lista de rastreamentos para a atividade Ação de Processo

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) aparecem na mesma atividade se eles também forem carregados na ferramenta e propagateActivity estiverem definidos como true. Isso é 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 de 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, transfere-se para uma atividade "Receber Bytes", na qual todos os bytes enviados pelo 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 "Mensagem de Processo", em que criamos o objeto WCF Message. Nesta 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 definida true como no cliente e no serviço, essa atividade terá a mesma ID que a definida no cliente e descrita anteriormente. Nesse estágio, começamos a aproveitar os benefícios da correlação direta entre endpoints, 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 abrir o ServiceHost. A atividade na coluna 5 é o ouvinte e as atividades restantes (6 a 8) descrevem o processamento WCF de uma mensagem, desde o processamento de bytes até a ativação do código do usuário.

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

Captura de tela do Visualizador de Rastreamento mostrando uma lista de atividades de serviço do WCF

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 de cliente para mensagens enviadas seguidas por rastreamentos de serviço para mensagens recebidas e processadas.

As seguintes imagens mostram uma visualização gráfica das atividades do cliente e do serviço do WCF

Grafo do Visualizador de Rastreamento que mostra as atividades de cliente e serviço do WCF.

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). Em seguida, 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).

Usar o Visualizador de Rastreamento

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

O exemplo usado 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 Ação de Processo 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ê pode 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. Captura de tela de atividades vermelhas ou amarelas para localizar a raiz de um problema.

No painel superior direito, você pode examinar os rastreamentos da atividade selecionada à esquerda. Em seguida, você pode examinar os traços vermelhos ou amarelos nesse painel e ver como eles estão correlacionados. No gráfico anterior, vemos sinais de alerta tanto para o cliente quanto para o serviço na mesma ação do processo.

Caso esses rastreamentos não forneçam a causa raiz do erro, você poderá utilizar o gráfico dando um duplo clique na atividade selecionada no painel esquerdo (aqui Ação de Processo). Em seguida, o grafo com atividades relacionadas é exibido. Em seguida, você pode expandir as atividades relacionadas (clicando nos sinais "+") para encontrar o primeiro traço emitido em vermelho ou amarelo. 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.

Usar o Visualizador de Rastreamento

Expandindo atividades para acompanhar a causa raiz de um problema

Se ServiceModel ActivityTracing estiver desativado, mas o rastreamento ServiceModel estiver ativado, você poderá ver os 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. Clicando duas vezes em uma mensagem em vermelho ou amarelo, você pode ver a exibição de grafo das atividades relacionadas. Essas atividades são as mais relacionadas à solicitação em que ocorreu um erro.

Captura de tela do Visualizador de Rastreamento com o log de mensagens habilitado.

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.

Consulte também