Delen via


Berichtstroomtracering configureren

Wanneer WCF-activiteitstracering (Windows Communication Foundation) is ingeschakeld, worden end-to-end activiteit-id's toegewezen aan logische activiteiten in de WCF-stack. In .NET Framework 4.6.1 is er nu een betere versie van deze functie die werkt met Event Tracing for Windows (ETW) met de naam berichtstroomtracering. Wanneer deze optie is ingeschakeld, worden end-to-end-activiteit-id's opgehaald uit (of toegewezen aan indien leeg) inkomende berichten en worden ze doorgegeven aan alle traceringsgebeurtenissen die worden verzonden nadat het bericht door het kanaal is gedecodeerd. Klanten kunnen deze functie gebruiken om berichtstromen te reconstrueren met traceringslogboeken van verschillende services na het decoderen.

Tracering kan worden ingeschakeld nadat een probleem is gedetecteerd met de toepassing en vervolgens worden uitgeschakeld zodra het probleem is opgelost.

Tracering inschakelen

U kunt berichtstroomtracering inschakelen door het configuratie-element .NET Framework 4 messageFlowTracing in te stellen op true, zoals wordt weergegeven in het volgende voorbeeld.

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

Notitie

Omdat het endToEndTracing configuratie-element zich in een Web.config-bestand bevindt, kan het niet dynamisch worden geconfigureerd op dezelfde manier als ETW. Om het endToEndTracing configuratie-element van kracht te laten worden, moet de toepassing worden gerecycled.

Activiteiten worden gecorreleerd door de uitwisseling van een id die de activiteits-id wordt genoemd. Deze id is een GUID en wordt gegenereerd door de klasse System.Diagnostics.CorrelationManager. Als u System.Diagnostics.Trace.CorrelationManager.ActivityID bewerkt, moet u ervoor zorgen dat de waarde is ingesteld op origineel wanneer het uitvoeringsbeheer wordt teruggezet naar WCF-code. Als u een asynchroon WCF-programmeermodel gebruikt, moet u er ook voor zorgen dat System.Diagnostics.Trace.CorrelationManager.ActivityID wordt overgedragen tussen de threads.

Berichtenstroomtracering en REST-services

Met berichtstroomtracering kunt u een aanvraag end-to-end traceren. Met SOAP-services wordt een activiteits-id verzonden in een SOAP-berichtkop. REST-aanvragen bevatten deze header niet, dus in plaats daarvan wordt een speciale HTTP-gebeurtenisheader gebruikt. Het volgende codefragment laat zien hoe u programmatisch de waarde activiteits-id kunt ophalen:

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

U kunt de header programmatisch toevoegen met behulp van de volgende code:

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