Sdílet prostřednictvím


Šíření ID aktivity

K šíření dochází v případě, že je povolené trasování aktivity ServiceModel (šíření modelu ServiceModel) nebo zakázáno (šíření aktivity user-to-user).

Trasování aktivity ServiceModel je povolené

Pokud je povolená aktivita ServiceModel ActivityTracing, šíření probíhá mezi aktivitami ProcessAction.

Server

propagateActivity Pokud je atribut nastaven na true klientovi i na serveru, ID aktivity na serveru je stejné jako ID ProcessAction v hlavičce šířené ActivityId zprávy.

Pokud ve zprávě (tjfalsepropagateActivity=. na klientovi) nebo na propagateActivityfalse=serveru není k dispozici žádná ActivityId hlavička, server vygeneruje nové ID aktivity.

Klient

Pokud je klient synchronně s jedním vláknem, klient ignoruje všechna nastavení propagateActivity klienta nebo serveru. Místo toho se odpověď zpracovává v aktivitě požadavku. Pokud je klient asynchronní nebo synchronní vícevláknový, propagateActivity=true v klientovi a ve zprávě odeslané serverem je hlavička ID aktivity, klient načte ID aktivity ze zprávy a přenese se do aktivity akce procesu, která obsahuje ID rozšířené aktivity. Jinak se klient přenese z aktivity zpracování zprávy na novou aktivitu akce procesu. Tento dodatečný přenos na novou aktivitu akce procesu se provádí kvůli konzistenci. V této aktivitě klient načte ID aktivity BeginCall z kontextu místního vlákna, když je vlákno přiděleno ke zpracování zprávy odpovědi. Potom se přenese do počáteční aktivity akce procesu.

Pokud je klient duplexní, klient funguje jako server při přijetí zprávy.

Šíření ve zprávách chyb

Zpracování platných a chybových zpráv se nijak neliší. Pokud propagateActivity=trueje ID aktivity přidané do hlaviček chybové zprávy SOAP identické s okolní aktivitou.

Trasování aktivity ServiceModel je zakázané.

Pokud je aktivita ServiceModel ActivityTracing zakázaná, šíření probíhá mezi aktivitami uživatelského kódu přímo bez procházení aktivit ServiceModel. ID aktivity definované uživatelem se také rozšíří prostřednictvím hlavičky ID aktivity zprávy.

Pokud propagateActivity=true a ActivityTracing=off pro naslouchací proces trasování ServiceModel (bez ohledu na to, jestli je trasování povoleno na ServiceModel), na klientovi nebo serveru dojde k následujícímu:

  • Při požadavku na operaci nebo odeslání odpovědi se ID aktivity v protokolu TLS rozšíří mimo uživatelský kód, dokud se nevytvoří zpráva. Před odesláním se do zprávy vloží také hlavička ID aktivity.

  • Při příjmu požadavku nebo přijetí odpovědi se ID aktivity načte z hlavičky zprávy hned po vytvoření přijatého objektu zprávy. ID aktivity v protokolu TLS se rozšíří, jakmile zpráva zmizí z oboru, dokud se nedosáhne kódu uživatele.

Tyto akce zaručují, že se trasování uživatelů zobrazí ve stejné aktivitě, pokud je šíření zapnuté. Neposkytuje však žádnou záruku trasování modelu ServiceModel. Trasování ServiceModel se vyskytuje v aktivitě kódu uživatele pouze v případě, že se zpracování těchto trasování provádí ve stejném vlákně, ve kterém byla nastavena aktivita uživatelského kódu.

Obecně platí, že trasování modelu služby lze pozorovat na následujících místech:

  • Pokud je trasování modelu ServiceModel zakázané, zobrazí se všechna vygenerovaná trasování v aktivitách uživatelů. Pokud je šíření povolené na serveru i klientovi, budou tyto trasování ve stejné aktivitě.

  • Pokud je povolené trasování modelu ServiceModel, ale aktivitaTracing je zakázaná, zobrazí se trasování uživatelů ve stejné aktivitě, pokud je šíření povoleno na obou koncích. Trasování serviceModel se zobrazí ve výchozí aktivitě 0000, pokud nedojde ve stejném vlákně jako zpracování uživatelského kódu, ve kterém je aktivita původně nastavena.

  • Pokud je povolené trasování modelu ServiceModel i ActivityTracing, zobrazí se trasování uživatelů v uživatelem definovaných aktivitách a trasování ServiceModel se zobrazí v aktivitách definovaných modelem ServiceModel. Šíření probíhá na úrovni ServiceModel.