Partilhar via


Usando o Service Trace Viewer para exibir rastreamentos correlacionados e solução de problemas

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

Usando a ferramenta Service Trace Viewer

A ferramenta Windows Communication Foundation (WCF) Service Trace Viewer ajuda a correlacionar rastreamentos de diagnóstico produzidos por ouvintes WCF para localizar a causa raiz de um erro. A ferramenta oferece uma maneira de visualizar, agrupar e filtrar rastreamentos facilmente para que você possa diagnosticar, reparar e verificar problemas com os serviços WCF. Para obter mais informações sobre como usar essa ferramenta, consulte Service Trace Viewer Tool (SvcTraceViewer.exe).

Este tópico contém capturas de tela de rastreamentos gerados pela execução do exemplo de Rastreamento e Log de Mensagens, quando visualizados usando a Ferramenta Visualizador de Rastreamento de Serviço (SvcTraceViewer.exe). Este tópico demonstra como entender o conteúdo do rastreamento, as atividades e sua correlação, e como analisar um grande número de rastreamentos durante a solução de problemas.

Visualizando 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 rastreio.

  • Rastrear o nome da fonte.

  • Nome do processo.

  • ID do tópico.

  • 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 do Service Trace Viewer ou na seção Informações básicas na exibição formatada do painel inferior direito ao selecionar um rastreamento.

Nota

Se o cliente e o serviço estiverem na mesma máquina, os rastreamentos para ambos os aplicativos estarão presentes. Eles podem ser filtrados usando a coluna Nome do processo.

Além disso, o modo de exibição formatado também fornece uma descrição para o rastreamento e informações detalhadas adicionais, quando disponíveis. Estes últimos podem incluir tipo de exceção e mensagem, pilhas de chamadas, ação de mensagem, campos de/para e outras informações de exceção.

Na visualização XML, as tags xml úteis incluem o seguinte:

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

  • <TimeCreated>.

  • <Source> (nome da fonte de rastreamento).

  • <Correlation> (ID da atividade definido ao emitir o rastreio).

  • <Execution> (ID do processo e do thread).

  • <Computer>.

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

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

<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 ServiceModel E2E

Quando a System.ServiceModel fonte de rastreamento é definida com um switchValue diferente de Desativado 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 vestígios 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 as atividades dentro dos endpoints. A propagação do ID de atividade permite relacionar atividades entre pontos de extremidade. Isso pode ser feito definindo propagateActivity=true a configuração em cada ponto de extremidade. Atividades, transferências e propagação permitem que você execute a correlação de erros. Desta forma, você pode encontrar a causa raiz de um erro mais rapidamente.

No cliente, uma atividade 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, ordenadas por tempo de criação. Segue-se uma lista cronológica de atividades:

  • Construção da fábrica de canais (ClientBase).

  • Abriu a fábrica de canais.

  • Processada a ação Adicionar.

  • Configure 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 Subtrair, Multiplicar e Dividir.

  • Fechou a fábrica do canal e, ao fazê-lo, fechou a sessão Segura e processou a resposta da mensagem de segurança Cancelar.

Vemos as mensagens de infraestrutura de segurança por causa do wsHttpBinding.

Nota

No WCF, mostramos mensagens de resposta sendo processadas inicialmente em uma atividade separada (mensagem de processo) antes de correlacioná-las à atividade de ação de processo correspondente que inclui a mensagem de solicitação, por meio de uma transferência. Isso acontece 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 Process Action existente com essa id para correlacionar a ela. Para solicitações síncronas, estamos bloqueando a resposta e, portanto, sabemos a qual ação de processo a resposta se refere.

A imagem a seguir mostra as atividades do cliente WCF listadas por 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, esta é uma visão hierárquica reduzida da lista de atividades à esquerda, com base na atividade pai selecionada. Como a ação Adicionar processo selecionada é a primeira solicitação feita, essa atividade contém a atividade Configurar sessão segura (transferir para, transferir de volta) e rastreamentos para o processamento real da ação Adicionar.

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 transfere-se para fora da atividade ambiental. Se isso não for definido, o WCF transfere para fora de 0000. Aqui, a segunda atividade, Process Action Add, transfere de 0. Em seguida, vemos Setup Secure Session.

A imagem a seguir mostra uma exibição gráfica das atividades do cliente WCF, especificamente Atividade ambiental (aqui 0), Ação de processo e Configurar sessão segura:

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

No painel superior direito, podemos ver todos os traços relacionados à atividade Adicionar ação de processo. Especificamente, enviámos a mensagem de pedido ("Enviou uma mensagem através de um canal") e recebemos a resposta ("Recebeu uma mensagem através de um canal") na mesma atividade. Isso é mostrado no gráfico a seguir. Para maior clareza, a atividade Configurar sessão segura é recolhida no gráfico.

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

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

Aqui, carregamos rastreamentos de cliente apenas para clareza, mas os rastreamentos de serviço (mensagem de solicitação recebida e mensagem de resposta enviada) aparecem na mesma atividade se também forem carregados na ferramenta e propagateActivity tiverem sido definidos como true. Isso é mostrado em uma ilustração posterior.

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

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

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

  3. Quando o ouvinte deteta uma solicitação de comunicação iniciada pelo cliente, ele transfere para uma atividade "Receber bytes", na qual todos os bytes enviados do cliente são processados. Nesta atividade, podemos ver quaisquer erros de conexão que tenham acontecido 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 "Processar mensagem", onde criamos o objeto Mensagem do WCF. Nesta atividade, vemos erros relacionados a um envelope incorreto ou uma mensagem malformada.

  5. Uma vez que a mensagem é formada, transferimos para uma atividade de Ação de Processo. Se propagateActivity estiver definida como true no cliente e no serviço, essa atividade terá a mesma id definida no cliente e descrita anteriormente. A partir deste estágio, começamos a nos beneficiar da correlação direta entre pontos de extremidade, porque todos os rastreamentos emitidos no WCF relacionados à solicitação estão nessa mesma atividade, incluindo o processamento da mensagem de resposta.

  6. Para ações fora do processo, criamos uma atividade "Executar código do usuário" para isolar os rastreamentos emitidos no código do usuário dos emitidos no WCF. No exemplo anterior, o rastreamento "O serviço envia adicionar resposta" é emitido na atividade "Executar código do usuário" e 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 gráfico das atividades de serviço WCF:

Screenshot of Trace Viewer showing a list of WCF service activities

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

As imagens a seguir mostram uma exibição de gráfico 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 mais à 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 é novamente emitido 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).

Using the Trace Viewer

Correlação de erros 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 deste gráfico para cenários sem segurança ou com solicitações assíncronas, em que a atividade Process Action engloba as operações de início e fim que constituem a chamada assíncrona e mostra as transferências para uma atividade de retorno de chamada. Para obter mais informações sobre cenários adicionais, consulte Cenários de rastreamento de ponta a ponta.

Solução de problemas usando o Service Trace Viewer

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 não tratadas que borbulham até 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 traços da atividade selecionada à esquerda. Em seguida, você pode examinar traços vermelhos ou amarelos nesse painel e ver como eles estão correlacionados. No gráfico anterior, vemos rastreamentos de aviso para o cliente e o serviço na mesma atividade de Ação de Processo.

Se esses rastreamentos não fornecerem a causa raiz do erro, você poderá utilizar o gráfico clicando duas vezes na atividade selecionada no painel esquerdo (aqui Ação de processo). O gráfico com atividades relacionadas é então exibido. Em seguida, você pode expandir as atividades relacionadas (clicando nos sinais de "+") para encontrar o primeiro traço emitido em vermelho ou amarelo em uma atividade relacionada. Continue expandindo as atividades que aconteceram pouco antes do rastreamento vermelho ou amarelo de interesse, seguindo transferências para atividades relacionadas ou fluxos de mensagens entre pontos de extremidade, até rastrear a causa raiz do problema.

Using the Trace Viewer

Expandir as atividades para rastrear 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 traços.

Se o Registo de Mensagens estiver ativado, pode utilizar o separador Mensagem para ver qual a mensagem que é afetada pelo erro. Ao clicar duas vezes em uma mensagem em vermelho ou amarelo, você pode ver a visualização em gráfico das atividades relacionadas. Estas atividades são as mais relacionadas com o pedido onde ocorreu um erro.

Screenshot of Trace Viewer with message logging enabled.

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

Consulte também