Visão geral de fluxo de mensagens
Em um sistema distribuído que contém serviços interconectados, é necessário determinar relações causais entre os serviços. É importante entender os vários componentes que faziam parte de um fluxo de solicitação para dar suporte a cenários críticos, como monitoramento de integridade, solução de problemas e análise de causa raiz. Para habilitar a correlação de rastreamentos entre vários serviços, no .NET Framework 4, adicionamos suporte por meio dos seguintes recursos:
Rastreamento analítico: um recurso de rastreamento de alto desempenho e baixa verbosidade usando o ETW (rastreamento de eventos para Windows).
Modelo de atividade de ponta a ponta para serviços do WCF/WF: esse recurso dá suporte à correlação de rastreamentos gerados pelos namespaces System.ServiceModel e System.Workflow.ComponentModel.
Rastreamento de ETW para WF: esse recurso usa o rastreamento de registros gerados pelos serviços do WF para fornecer visibilidade sobre o estado e o progresso atuais do fluxo de trabalho.
Erros registrados em um rastreamento ou registro de rastreamento podem ser usados para localizar defeitos de código ou mensagens formadas incorretamente. A propriedade ActivityId do nó Correlação no cabeçalho de mensagem do evento pode ser usada para determinar a atividade de falha. Para habilitar o rastreamento de fluxo de mensagens por ID de atividade, consulte Configurar o rastreamento de fluxo de mensagem. Este tópico demonstra como habilitar o rastreamento de fluxo de mensagens no projeto criado no tutorial Introdução.
Para habilitar o rastreamento de fluxo de mensagens no tutorial Introdução
Abra o visualizador de eventos clicando em Iniciar, Executar e inserindo
eventvwr.exe
.Se você não tiver ativado rastreamento de análise, expanda Logs de Aplicativos e Serviços, Microsoft, Windows, Servidor de aplicativos - Aplicativos. Selecione Visualizar, Mostrar logs de análise e depuração. Clique com o botão direito do mouse Analítico e selecione Habilitar Log. Deixe o visualizador de eventos aberto de modo que os rastreamentos podem ser exibidos.
Abra o exemplo criado no tutorial Introdução no Visual Studio 2012. Observe que você deve executar o Visual Studio 2012 como administrador para que o serviço possa ser criado. Se você tiver os exemplos do WCF instalados, poderá abrir a Introdução, que contém o projeto concluído criado no tutorial.
Clique com botão direito do mouse no projeto Serviço e selecione Adicionar, Novo item. Selecione Arquivo de configuração de aplicativo e clique em OK.
Adicione o código a seguir ao arquivo App.Config criado na etapa anterior.
<system.serviceModel> <diagnostics> <endToEndTracing propagateActivity="true" messageFlowTracing="true"/> </diagnostics> </system.serviceModel>
Execute o aplicativo de servidor sem depuração pressionando CTRL+F5. Execute o projeto cliente clicando com o botão direito do mouse no projeto Cliente e selecionando Depurar, Iniciar Nova Instância.
Para rastrear os eventos do cliente para o servidor, adicione o seguinte ao arquivo de configuração do aplicativo no projeto cliente.
<diagnostics> <endToEndTracing propagateActivity="true" messageFlowTracing="true"/> </diagnostics>
Em Program.cs no cliente, adicione a seguinte diretiva
using
.using System.Diagnostics;
No método
Main
, no arquivo program.cs no projeto cliente, defina o GUID de rastreamento a ser propagado no log de eventos.Guid guid = Guid.NewGuid(); Trace.CorrelationManager.ActivityId = guid;
Atualize e examine o log de análise. Procure um evento com a ID de evento 220. Selecione o evento e clique na guia Detalhes no painel de visualização. Esse evento conterá a ID de correlação para a atividade de chamada.
<Correlation ActivityID="{A066CCF1-8AB3-459B-B62F-F79F957A5036}" />
Observação
Todos os eventos com o mesmo GUID na ActivityID estão relacionados a uma solicitação. Isso pode ser usado para correlacionar mensagens de um cliente específico a um serviço específico. Se o cliente chamar outro serviço, o mesmo cliente poderá ser identificado pela ActivityID.
Em alguns casos, a ActivityID pode mudar do GUID original para uma nova ActivityID. Nesse caso, um evento de transferência é emitido. Essa ID de evento é 499 e o evento conterá os dados a seguir no cabeçalho.
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event"> <System> <Provider Name="Microsoft-Windows-Application Server-Applications" Guid="{c651f5f6-1c0d-492e-8ae1-b4efd7c9d503}" /> <EventID>499</EventID> ... <Correlation ActivityID="{A066CCF1-8AB3-459B-B62F-F79F957A5036}" RelatedActivityID="{85FC0930-9C49-42DA-804B-A7368104BD1B}" /> ... </System> </Event>
Observação
O evento de transferência registra a alteração da ActivityID ativa do GUID especificado como ActivityID para o GUID especificado como RelatedActivityID. Depois que o evento de transferência for emitido, todos os eventos conterão o novo GUID como a ActivityID.