Udostępnij za pośrednictwem


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=trueidentyfikator 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.