Udostępnij za pośrednictwem


Konfigurowanie śledzenia przepływu komunikatów

Po włączeniu śledzenia działań programu Windows Communication Foundation (WCF) identyfikatory działania kompleksowego są przypisywane do działań logicznych w całym stosie WCF. W .NET Framework 4.6.1 istnieje teraz wyższa wersja wydajności tej funkcji, która współpracuje z śledzeniem zdarzeń dla systemu Windows (ETW) nazywanym śledzeniem przepływu komunikatów. Po włączeniu identyfikatory działań end-to-end są pobierane z (lub przypisane do , jeśli puste) komunikaty przychodzące i są propagowane do wszystkich zdarzeń śledzenia, które są emitowane po dekodacji komunikatu przez kanał. Klienci mogą używać tej funkcji do odtworzenia przepływów komunikatów z dziennikami śledzenia z różnych usług po dekodowaniu.

Śledzenie można włączyć po wykryciu problemu z aplikacją, a następnie wyłączone po rozwiązaniu problemu.

Włączenie debugowania

Śledzenie przepływu komunikatów można włączyć, ustawiając element konfiguracji .NET Framework 4 messageFlowTracing na true, jak pokazano w poniższym przykładzie.

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

Uwaga

endToEndTracing Ponieważ element konfiguracji znajduje się w pliku Web.config, nie można go dynamicznie skonfigurować w taki sam sposób jak ETW. endToEndTracing Aby element konfiguracji został w życie, aplikacja musi zostać odzyskana.

Działania są skorelowane przez wymianę identyfikatora o nazwie identyfikator działania. Ten identyfikator jest identyfikatorem GUID i jest generowany przez klasę System.Diagnostics.CorrelationManager. Jeśli manipulujesz elementem System.Diagnostics.Trace.CorrelationManager.ActivityID, upewnij się, że wartość jest ustawiona na oryginalną podczas przenoszenia kontrolki wykonywania z powrotem do kodu WCF. Ponadto, jeśli używasz asynchronicznego modelu programowania WCF, upewnij się, że element System.Diagnostics.Trace.CorrelationManager.ActivityID jest przenoszony między wątkami.

Śledzenie przepływu komunikatów i usługi REST

Śledzenie przepływu komunikatów umożliwia śledzenie końca żądania. W przypadku usług opartych na protokole SOAP identyfikator działania jest wysyłany w nagłówku komunikatu SOAP. Żądania REST nie zawierają tego nagłówka, więc jest używany specjalny nagłówek zdarzenia HTTP. Poniższy fragment kodu pokazuje, jak programowo pobrać wartość identyfikatora działania:

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

Nagłówek można dodać programowo przy użyciu następującego kodu:

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