Sdílet prostřednictvím


Konfigurace trasování toku zpráv

Pokud je povolené trasování aktivit wcf (Windows Communication Foundation), jsou id koncové aktivity přiřazena logickým aktivitám v rámci zásobníku WCF. V rozhraní .NET Framework 4.6.1 je nyní k dispozici verze s vyšším výkonem této funkce, která funguje s trasováním událostí pro Windows (ETW) označovanou jako trasování toku zpráv. Pokud je tato možnost povolená, ID koncové aktivity jsou převzata z příchozích zpráv (nebo přiřazena k příchozím zprávám, pokud jsou prázdné) a šíří se do všech událostí trasování, které se vygenerují po dekódování zprávy kanálem. Zákazníci můžou tuto funkci použít k rekonstrukci toků zpráv s využitím protokolů trasování z různých služeb po dekódování.

Trasování je možné povolit po zjištění problému s aplikací a po vyřešení problému ho zakázat.

Povolení trasování

Trasování toku zpráv můžete povolit nastavením konfiguračního elementu rozhraní .NET Framework 4 messageFlowTracing na truehodnotu , jak je znázorněno v následujícím příkladu.

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

Poznámka

Vzhledem k tomu, že endToEndTracing element konfigurace se nachází v souboru Web.config, nelze ho dynamicky konfigurovat stejným způsobem jako pro Windows. Aby se endToEndTracing element konfigurace projevil, musí být aplikace recyklována.

Aktivity jsou korelovány výměnou identifikátoru označovaného jako ID aktivity. Tento identifikátor je identifikátor GUID a je generován třídou System.Diagnostics.CorrelationManager. Pokud pracujete s System.Diagnostics.Trace.CorrelationManager.ActivityID, ujistěte se, že hodnota je nastavena na původní, když se ovládací prvek provádění přenese zpět do kódu WCF. Pokud používáte asynchronní programovací model WCF, ujistěte se, že System.Diagnostics.Trace.CorrelationManager.ActivityID se přenáší mezi vlákny.

Trasování toku zpráv a služby REST

Trasování toku zpráv umožňuje trasování požadavku od konce. U služeb založených na protokolu SOAP se ID aktivity odesílá v hlavičce zprávy SOAP. Požadavky REST tuto hlavičku neobsahují, takže se místo toho použije speciální hlavička událostí HTTP. Následující fragment kódu ukazuje, jak můžete programově načíst hodnotu ID aktivity:

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

Hlavičku můžete přidat programově pomocí následujícího kódu:

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