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()));