Compartilhar via


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

  1. Abra o visualizador de eventos clicando em Iniciar, Executar e inserindo eventvwr.exe.

  2. 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.

  3. 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.

  4. 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.

  5. 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>
    
  6. 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.

  7. 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>
    
  8. Em Program.cs no cliente, adicione a seguinte diretiva using.

    using System.Diagnostics;
    
  9. 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;
    
  10. 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.

  11. 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.