Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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 Registro 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 rastreio
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.
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.
Observação
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 rastreamento).<TimeCreated>.<Source>(nome da fonte de rastreio).<Correlation>(ID da atividade definido ao emitir o traço).<Execution>(ID do processo e do thread).<Computer>.<ExtendedData>, incluindo<Action>,<MessageID>e a<ActivityId>definição 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 endpoints. Isso pode ser feito configurando propagateActivity=true em cada ponto de configuração. 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:
Construiu a fábrica de canais (ClientBase).
Abriu a fábrica de canais.
Processada a ação Adicionar.
Configurar 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 (Processar mensagem 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 da 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 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, bloqueamos até que a resposta seja recebida e, assim, sabemos a qual ação do 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):
Quando selecionamos uma atividade no painel esquerdo, podemos ver atividades aninhadas e rastros no painel superior direito. Portanto, esta é uma vista hierárquica simplificada da lista de atividades que se encontra à 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 do contexto de atividade ambiental. Se isso não for definido, o WCF transfere para fora de 0000. Aqui, a segunda atividade, Process Action Add, passa de 0. Em seguida, vemos configurar sessão segura.
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:
No painel superior direito, podemos ver todos os traços relacionados à atividade Adicionar Ação ao 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 de configurar sessão segura está recolhida no gráfico.
A imagem a seguir mostra uma lista de rastreamentos da atividade Process Action. Enviamos o pedido e recebemos a resposta na mesma atividade.
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 é mapeado para os conceitos do WCF da seguinte maneira:
Construímos e abrimos um ServiceHost (isso pode criar várias atividades relacionadas ao host, por exemplo, no caso de segurança).
Criamos uma atividade de escuta para cada ouvinte no ServiceHost (com transferências de entrada e saída do ServiceHost aberto).
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.
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.
Uma vez que a mensagem é formada, passamos a uma atividade de ação de processamento. Se
propagateActivityestiver definida comotrueno 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 beneficiar-nos da correlação direta entre pontos finais, porque todos os traços emitidos no WCF relacionados ao pedido estão nessa mesma atividade, incluindo o processamento da mensagem de resposta.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 resposta de adição" emite-se na atividade "Executar código do usuário", não na atividade propagada pelo cliente, quando 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 seguinte mostra uma vista gráfica das atividades do serviço WCF.
A captura de tela a seguir mostra as atividades para o cliente e o serviço, e destaca a atividade "Adicionar Ação de Processo" 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 seguintes mostram uma visualização gráfica das atividades do cliente e do serviço do WCF.
No cenário de erro mencionado a seguir, os traces 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, é novamente emitido um rastreio de aviso para indicar a mensagem de erro (atividade destacada em 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).
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 Rastreio 'End-To-End'.
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 se propagam até ao utilizador.
A imagem a seguir mostra como selecionar uma atividade vermelha ou amarela para localizar a raiz de um problema.
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 traços de aviso tanto para o cliente quanto para 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 a expandir as atividades que aconteceram pouco antes do rastro vermelho ou amarelo de interesse, seguindo transferências para atividades relacionadas ou fluxos de mensagens nos pontos de extremidade, até rastrear a causa raiz do problema.
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.
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.