Configurando rastreamento de fluxo de mensagem
Quando o rastreamento de atividade do WCF (Windows Communication Foundation) está habilitado, as IDs de atividade de ponta a ponta são atribuídas a atividades lógicas em toda a pilha WCF. No .NET Framework 4.6.1, agora há uma versão de maior desempenho desse recurso que funciona com o ETW (Rastreamento de Eventos para Windows) chamado rastreamento de fluxo de mensagens. Quando habilitadas, as IDs de atividade de ponta a ponta são retiradas (ou atribuídas a mensagens de entrada, se vazias) e são propagadas para todos os eventos de rastreamento emitidos após a mensagem ter sido decodificada pelo canal. Os clientes podem usar esse recurso para reconstruir fluxos de mensagens com logs de rastreamento de diferentes serviços após a decodificação.
O rastreamento pode ser ativado se um problema for detectado com o aplicativo e desativado novamente assim que o problema for resolvido.
Habilitar o rastreamento
Você pode habilitar o rastreamento de fluxo de mensagens definindo o elemento de configuração messageFlowTracing
do .NET Framework 4 como true
, conforme mostrado no exemplo a seguir.
<system.servicemodel>
<diagnostics>
<endToEndTracing propagateActivity="true" messageFlowTracing="true" />
</diagnostics>
</system.servicemodel>
Observação
Como o elemento de configuração endToEndTracing
reside em um arquivo Web.config, ele não pode ser configurado dinamicamente da mesma maneira que o ETW. Para que o elemento de configuração endToEndTracing
entre em vigor, o aplicativo deve ser reciclado.
As atividades são correlacionadas pelo intercâmbio de um identificador chamado ID da atividade. Esse identificador é um GUID e é gerado pela classe System.Diagnostics.CorrelationManager. Se você manipular System.Diagnostics.Trace.CorrelationManager.ActivityID, verifique se o valor é definido como original quando o controle de execução for transferido de volta para o código WCF. Além disso, se você usar um modelo assíncrono de programação WCF, verifique se System.Diagnostics.Trace.CorrelationManager.ActivityID é transferido entre os threads.
Rastreamento de fluxo de mensagens e serviços REST
O rastreamento de fluxo de mensagens permite rastrear uma solicitação de ponta a ponta. Com os serviços baseados em SOAP, uma ID de Atividade é enviada em um cabeçalho de mensagem SOAP. As solicitações REST não contêm esse cabeçalho para que um cabeçalho de evento HTTP especial seja usado. O snippet de código a seguir mostra como você pode recuperar programaticamente o valor da 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"];
// ...
}
Você pode adicionar programaticamente o cabeçalho usando o seguinte código:
HttpContent content = new StreamContent(contentStream);
Guid correlation = Guid.NewGuid();
content.Headers.Add("E2EActivity", Convert.ToBase64String(correlation.ToByteArray()));