Spridning av aktivitets-ID
Spridning sker när ServiceModel-aktivitetsspårning är aktiverat (ServiceModel-spridning) eller inaktiverat (spridning av användar-till-användare-aktivitet).
ServiceModel-aktivitetsspårning är aktiverat
Om ServiceModel ActivityTracing är aktiverat sker spridning mellan ProcessAction-aktiviteter.
Server
propagateActivity
När attributet är inställt true
på på både klienten och servern är IDProcessAction
:t för aktiviteten på servern identiskt med ID:t i det spridade ActivityId
meddelandehuvudet.
När inget ActivityId
huvud finns i meddelandet (dvs propagateActivity
=false
. på klienten) eller när propagateActivity
=false
det är på servern genererar servern ett nytt aktivitets-ID.
Klient
Om klienten är synkront enkeltrådad ignorerar klienten alla inställningar för propagateActivity
på klienten eller servern. I stället hanteras svaret i begärandeaktiviteten. Om klienten är asynkron eller synkron, propagateActivity
=true
i klienten och det finns ett aktivitets-ID-huvud i meddelandet som skickas av servern, hämtar klienten aktivitets-ID:t från meddelandet och överför till processåtgärdsaktiviteten som innehåller det spridade aktivitets-ID:t. Annars överförs klienten från processmeddelandeaktiviteten till en ny processåtgärdsaktivitet. Den här extra överföringen till en ny processåtgärdsaktivitet görs för konsekvens. I den här aktiviteten hämtar klienten aktivitets-ID för BeginCall-aktiviteten från den lokala trådkontexten när tråden allokeras för bearbetning av svarsmeddelanden. Den överförs sedan till den första processåtgärdsaktiviteten.
Om klienten är duplex fungerar klienten som server när meddelandet tas emot.
Spridning i felmeddelanden
Det finns ingen skillnad i hanteringen av giltiga och felaktiga meddelanden. Om propagateActivity
=true
är aktivitets-ID:t som lagts till i SOAP-felmeddelanderubrikerna identiskt med den omgivande aktiviteten.
ServiceModel-aktivitetsspårning är inaktiverad
Om ServiceModel ActivityTracing är inaktiverat sker spridning mellan användarkodaktiviteter direkt utan att gå igenom ServiceModel-aktiviteter. Ett användardefinierat aktivitets-ID sprids också via meddelandeaktivitets-ID-huvudet.
Om propagateActivity
=true
och ActivityTracing
=off
för en ServiceModel-spårningslyssnare (oavsett om spårning är aktiverat på ServiceModel) sker följande på antingen klienten eller servern:
Vid åtgärdsbegäran eller sändningssvar sprids aktivitets-ID:t i TLS ut ur användarkoden tills ett meddelande har skapats. Ett aktivitets-ID-huvud infogas också i meddelandet innan det skickas.
När du tar emot begäran eller tar emot svar hämtas aktivitets-ID:t från meddelandehuvudet så snart det mottagna meddelandeobjektet har skapats. Aktivitets-ID:t i TLS sprids så snart meddelandet försvinner från omfånget tills användarkoden har nåtts.
Dessa åtgärder garanterar att användarspårningar visas i samma aktivitet om spridningen är på. Det ger dock ingen garanti för ServiceModel-spårningar. ServiceModel-spårningar sker endast i en användarkodaktivitet om bearbetningen av dessa spårningar körs på samma tråd där användarkodaktiviteten angavs.
I allmänhet kan ServiceModel-spårningar observeras på följande platser:
Om ServiceModel-spårning är inaktiverat visas alla avgivna spårningar i användaraktiviteter. Om spridning är aktiverat på både servern och klienten finns dessa spårningar i samma aktivitet.
Om ServiceModel-spårning är aktiverat, men ActivityTracing är inaktiverat, visas användarspårningar i samma aktivitet om spridning är aktiverat i båda ändar. ServiceModel-spårningar visas i standardaktiviteten 0000, såvida de inte förekommer i samma tråd som användarkodbearbetningen där aktiviteten ursprungligen anges.
Om både ServiceModel-spårning och ActivityTracing är aktiverade visas användarspårningar i användardefinierade aktiviteter och ServiceModel-spårningar visas i ServiceModel-definierade aktiviteter. Spridning sker på ServiceModel-nivå.