Partilhar via


Configurar o Rastreio de Fluxo de Mensagens

Quando o rastreio de atividades do Windows Communication Foundation (WCF) está ativado, os IDs de Atividade Ponto a Ponto são atribuídos a atividades lógicas em toda a pilha do WCF. No .NET Framework 4.6.1, existe agora uma versão de desempenho superior desta funcionalidade que funciona com o Rastreio de Eventos para Windows (ETW) denominado rastreio de fluxo de mensagens. Quando ativados, os IDs de atividade Ponto a Ponto são retirados (ou atribuídos a mensagens recebidas se estiverem vazias) e propagados para todos os eventos de rastreio emitidos após a mensagem ter sido descodificada pelo canal. Os clientes podem utilizar esta funcionalidade para reconstruir fluxos de mensagens com registos de rastreio de diferentes serviços após a descodificação.

O rastreio pode ser ativado depois de ser detetado um problema com a aplicação e, em seguida, desativado assim que o problema for resolvido.

Ativar o Rastreio

Pode ativar o rastreio de fluxo de mensagens ao definir o elemento de configuração .NET Framework 4 messageFlowTracing como true, conforme mostrado no exemplo seguinte.

<system.servicemodel>  
  <diagnostics>  
    <endToEndTracing propagateActivity="true" messageFlowTracing="true" />  
  </diagnostics>  
</system.servicemodel>  

Nota

Uma vez que o endToEndTracing elemento de configuração reside num ficheiro Web.config, não pode ser configurado dinamicamente da mesma forma que o ETW. Para que o endToEndTracing elemento de configuração entre em vigor, a aplicação tem de ser reciclada.

As atividades estão correlacionadas com o intercâmbio de um identificador chamado ID da atividade. Este identificador é um GUID e é gerado pela classe System.Diagnostics.CorrelationManager. Se manipular System.Diagnostics.Trace.CorrelationManager.ActivityID, certifique-se de que o valor está definido como original quando o controlo de execução é transferido de volta para o código WCF. Além disso, se utilizar um modelo de programação WCF assíncrono, certifique-se de que System.Diagnostics.Trace.CorrelationManager.ActivityID é transferido entre os threads.

Rastreio de Fluxo de Mensagens e Serviços REST

O rastreio de fluxo de mensagens permite-lhe rastrear um pedido ponto a ponto. Com os serviços baseados em SOAP, é enviado um ID de Atividade num cabeçalho de mensagem SOAP. Os pedidos REST não contêm este cabeçalho, pelo que é utilizado um cabeçalho de evento HTTP especial. O fragmento de código seguinte mostra como pode obter programaticamente o valor ID da Atividade:

Object output = null;
if (OperationContext.Current.IncomingMessageProperties.TryGetValue(HttpRequestMessageProperty.Name, out output))
{
   HttpRequestMessageProperty httpHeaders = output as HttpRequestMessageProperty;
   // Retrieve the Activity Id from the HTTP header    string e2eId = httpHeaders.Headers["E2EActivity"];
   // ...
}

Pode adicionar programaticamente o cabeçalho com o seguinte código:

HttpContent content = new StreamContent(contentStream);  
Guid correlation = Guid.NewGuid();  
content.Headers.Add("E2EActivity", Convert.ToBase64String(correlation.ToByteArray()));