Partilhar via


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

  1. Abra o Visualizador de Eventos clicando em Iniciar, Executar e inserindo eventvwr.exe.

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

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

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

  5. Adicione o seguinte código 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 using diretiva.

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

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