Propagacja identyfikatora działania
Propagacja odbywa się, gdy śledzenie aktywności ServiceModel jest włączone (propagacja modelu ServiceModel) lub wyłączone (propagacja aktywności użytkownik-użytkownik).
Śledzenie aktywności modelu ServiceModel jest włączone
Jeśli parametr ServiceModel ActivityTracing jest włączony, propagacja odbywa się między działaniami ProcessAction.
Serwer
propagateActivity
Gdy atrybut jest ustawiony true
na wartość zarówno na kliencie, jak i serwerze, identyfikator ProcessAction
działania na serwerze jest identyczny z identyfikatorem w nagłówku propagowanego ActivityId
komunikatu.
Jeśli żaden nagłówek nie ActivityId
jest obecny w komunikacie (tj propagateActivity
=false
. na kliencie) lub na propagateActivity
=false
serwerze, serwer generuje nowy identyfikator działania.
Klient
Jeśli klient jest synchronicznie pojedynczy wątek, klient ignoruje wszystkie ustawienia propagateActivity
klienta lub serwera. Zamiast tego odpowiedź jest obsługiwana w działaniu żądania. Jeśli klient jest asynchroniczny lub synchronicznie wielowątkowy, propagateActivity
=true
w kliencie i istnieje nagłówek identyfikatora działania w komunikacie wysłanym przez serwer, klient pobiera identyfikator działania z komunikatu i przenosi do działania akcji procesu zawierającego identyfikator propagowanego działania. W przeciwnym razie klient przenosi działanie komunikatu procesu do nowego działania akcji procesu. Ten dodatkowy transfer do nowego działania akcji procesu jest wykonywany w celu zapewnienia spójności. Wewnątrz tego działania klient pobiera identyfikator działania działania BeginCall z kontekstu wątku lokalnego, gdy wątek jest przydzielany do przetwarzania komunikatów odpowiedzi. Następnie zostanie przeniesiona do początkowego działania akcji procesu.
Jeśli klient jest dwukierunkowy, klient działa jako serwer podczas odbierania komunikatu.
Propagacja w komunikatach o błędach
Nie ma różnicy w obsłudze prawidłowych i błędów komunikatów. Jeśli propagateActivity
=true
identyfikator działania dodany do nagłówków komunikatów o błędach protokołu SOAP jest identyczny z działaniem otoczenia.
Śledzenie aktywności modelu ServiceModel jest wyłączone
Jeśli funkcja ServiceModel ActivityTracing jest wyłączona, propagacja odbywa się bezpośrednio między działaniami kodu użytkownika bez przechodzenia przez działania modelu ServiceModel. Identyfikator działania zdefiniowanego przez użytkownika jest również propagowany za pośrednictwem nagłówka identyfikatora działania komunikatu.
Jeśli propagateActivity
=true
i ActivityTracing
=off
dla odbiornika śledzenia usługi ServiceModel (niezależnie od tego, czy śledzenie jest włączone w usłudze ServiceModel), na kliencie lub serwerze są wykonywane następujące czynności:
Podczas żądania operacji lub wysyłania odpowiedzi identyfikator działania w protokole TLS jest propagowany z kodu użytkownika do momentu utworzenia komunikatu. Nagłówek identyfikatora działania jest również wstawiany do wiadomości przed jej wysłaniem.
Po otrzymaniu żądania lub odebraniu odpowiedzi identyfikator działania jest pobierany z nagłówka komunikatu natychmiast po utworzeniu obiektu odebranego komunikatu. Identyfikator działania w protokole TLS jest propagowany natychmiast po zniknięciu komunikatu z zakresu do momentu osiągnięcia kodu użytkownika.
Te akcje gwarantują, że ślady użytkownika będą wyświetlane w tym samym działaniu, jeśli propagacja jest włączona. Nie gwarantuje jednak śladów modelu ServiceModel. Ślady modelu ServiceModel występują w działaniu kodu użytkownika tylko wtedy, gdy przetwarzanie tych śladów jest wykonywane w tym samym wątku, w którym ustawiono działanie kodu użytkownika.
Ogólnie rzecz biorąc, ślady modelu ServiceModel można zaobserwować w następujących miejscach:
Jeśli śledzenie modelu ServiceModel jest wyłączone, wszystkie emitowane ślady są wyświetlane w działaniach użytkownika. Jeśli propagacja jest włączona zarówno na serwerze, jak i kliencie, te ślady będą w tym samym działaniu.
Jeśli śledzenie modelu ServiceModel jest włączone, ale funkcja ActivityTracing jest wyłączona, ślady użytkowników są wyświetlane w tym samym działaniu, jeśli propagacja jest włączona na obu końcach. Ślady modelu ServiceModel są wyświetlane w domyślnym 0000 działaniach, chyba że występują w tym samym wątku co przetwarzanie kodu użytkownika, w którym działanie jest początkowo ustawione.
Jeśli włączono śledzenie modelu ServiceModel i activityTracing, ślady użytkownika są wyświetlane w działaniach zdefiniowanych przez użytkownika, a ślady modelu ServiceModel są wyświetlane w działaniach zdefiniowanych przez model usługi. Propagacja odbywa się na poziomie modelu ServiceModel.