Dela via


Konfigurera spårning av meddelandeflöde

När aktivitetsspårning i Windows Communication Foundation (WCF) är aktiverat tilldelas aktivitets-ID:n från slutpunkt till slutpunkt till logiska aktiviteter i WCF-stacken. I .NET Framework 4.6.1 finns det nu en högre prestandaversion av den här funktionen som fungerar med händelsespårning för Windows (ETW) som kallas meddelandeflödesspårning. När det här alternativet är aktiverat hämtas aktivitets-ID:n från (eller tilldelas till om de är tomma) inkommande meddelanden och sprids till alla spårningshändelser som genereras efter att meddelandet har avkodats av kanalen. Kunder kan använda den här funktionen för att rekonstruera meddelandeflöden med spårningsloggar från olika tjänster efter avkodning.

Spårning kan aktiveras när ett problem har identifierats med programmet och sedan inaktiveras när problemet har lösts.

Aktivera spårning

Du kan aktivera spårning av meddelandeflöde genom att ange konfigurationselementet .NET Framework 4 messageFlowTracing till true, enligt följande exempel.

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

Anteckning

endToEndTracing Eftersom konfigurationselementet finns i en Web.config fil kan det inte konfigureras dynamiskt på samma sätt som ETW. För att konfigurationselementet endToEndTracing ska börja gälla måste programmet återanvändas.

Aktiviteter korreleras med utbytet av en identifierare som kallas aktivitets-ID. Den här identifieraren är ett GUID och genereras av klassen System.Diagnostics.CorrelationManager. Om du manipulerar System.Diagnostics.Trace.CorrelationManager.ActivityID kontrollerar du att värdet är inställt på original när körningskontrollen överförs tillbaka till WCF-kod. Om du använder en asynkron WCF-programmeringsmodell kontrollerar du också att System.Diagnostics.Trace.CorrelationManager.ActivityID överförs mellan trådarna.

Spårning av meddelandeflöde och REST-tjänster

Med spårning av meddelandeflöde kan du spåra en begäran från slutpunkt till slutpunkt. Med SOAP-baserade tjänster skickas ett aktivitets-ID i ett SOAP-meddelandehuvud. REST-begäranden innehåller inte det här huvudet, så en särskild HTTP-händelserubrik används i stället. Följande kodfragment visar hur du programmatiskt kan hämta värdet för aktivitets-ID:

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"];
   // ...
}

Du kan lägga till rubriken programmatiskt med hjälp av följande kod:

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