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()));