Visão geral do fluxo de mensagens
Num sistema distribuído que contenha serviços interligados, é 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 Rastreamento de Eventos para Windows (ETW).
Modelo de atividade de ponta a System.ServiceModel ponta para serviços WCF/WF: esse recurso oferece suporte à correlação de rastreamentos gerados pelos namespaces e System.Workflow.ComponentModel .
Rastreamento ETW para WF: esse recurso usa registros de rastreamento gerados por serviços WF para fornecer visibilidade sobre o estado atual e o progresso do fluxo de trabalho.
Os erros registrados em um registro de rastreamento ou rastreamento podem ser usados para encontrar defeitos de código ou mensagens formadas incorretamente. A propriedade ActivityId do nó Correlation no cabeçalho da mensagem do evento pode ser usada para determinar a atividade com falha. Para habilitar o rastreamento de fluxo de mensagens por ID de atividade, consulte Configurando o rastreamento de fluxo de mensagens. 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 habilitado o rastreamento analítico, expanda Logs de Aplicativos e Serviços, Microsoft, Windows, Application Server-Applications. Selecione Exibir, Mostrar logs analíticos e de depuração. Clique com o botão direito do mouse em Analítico e selecione Ativar Log. Deixe o Visualizador de Eventos aberto para que os rastreamentos possam ser visualizados.
Abra o exemplo criado no tutorial de 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 WCF instalados, você pode abrir o Introdução, que contém o projeto concluído criado no tutorial.
Clique com o botão direito do mouse no projeto Serviço e selecione Adicionar, Novo Item. Selecione Arquivo de configuração do aplicativo e clique em OK.
Adicione o seguinte código 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
using
diretiva.using System.Diagnostics;
Main
No método 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 analítico . Procure um evento com 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}" />
Nota
Todos os eventos com o mesmo GUID no 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 chamou outro serviço, o mesmo cliente poderia ser identificado pelo ActivityID.
Em alguns casos, o ActivityID pode mudar do GUID original para um novo ActivityID. Nesse caso, é emitido um evento de transferência. Esse ID de evento é 499 e o evento conterá os seguintes dados 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>
Nota
O evento transfer registra a alteração do ActivityID ativo 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 ActivityID.