Asynchronní scénáře použití HTTP, TCP nebo pojmenovaného kanálu
Toto téma popisuje aktivity a přenosy pro různé scénáře asynchronních požadavků a odpovědí s vícevláknovými požadavky pomocí protokolu HTTP, TCP nebo pojmenovaného kanálu.
Asynchronní požadavek nebo odpověď bez chyb
Tato část popisuje aktivity a přenosy pro scénář asynchronní žádosti a odpovědi s vícevláknovými klienty.
Aktivita volajícího se ukončí, když beginCall
se vrátí, a endCall
vrátí se. Pokud je volána zpětná volání, vrátí zpětné volání.
Volaná aktivita se ukončí, když beginCall
se vrátí, endCall
vrátí nebo když se zpětné volání vrátí, pokud byla volána z této aktivity.
Asynchronní klient bez zpětného volání
Šíření je povoleno na obou stranách pomocí protokolu HTTP.
If propagateActivity=true
, ProcessMessage označuje, do které aktivity ProcessAction se má přenést.
V případě scénářů založených na protokolu HTTP se funkce ReceiveBytes vyvolá na první zprávu, která se má odeslat, a existuje po celou dobu života požadavku.
Šíření je na obou stranách zakázáno pomocí protokolu HTTP.
Pokud propagateActivity=false
na obou stranách ProcessMessage neindikuje, do které aktivity ProcessAction se má přenést. Proto se vyvolá nová dočasná aktivita ProcessAction s novým ID. Když se asynchronní odpověď shoduje s požadavkem v kódu ServiceModel, ID aktivity lze načíst z místního kontextu. Skutečnou aktivitu ProcessAction lze přenést s tímto ID.
V případě scénářů založených na protokolu HTTP se funkce ReceiveBytes vyvolá na první zprávu, která se má odeslat, a existuje po celou dobu života požadavku.
Aktivita akce procesu se vytvoří v asynchronním klientovi, když propagateActivity=false
je volající nebo volaný, a když zpráva odpovědi neobsahuje hlavičku akce.
Šíření je povoleno na obou stranách pomocí protokolu TCP nebo pojmenovaného kanálu.
Pro scénář založený na pojmenovaném kanálu nebo protokolu TCP se funkce ReceiveBytes vyvolá při otevření klienta a existuje po celou dobu trvání připojení.
Podobně jako na prvním obrázku, pokud propagateActivity=true
ProcessMessage označuje, do které aktivity ProcessAction se má přenést.
Šíření je na obou stranách zakázáno pomocí protokolu TCP nebo pojmenovaného kanálu.
Pro scénář založený na pojmenovaném kanálu nebo protokolu TCP se funkce ReceiveBytes vyvolá při otevření klienta a existuje po celou dobu trvání připojení.
Podobně jako na druhé imagi, pokud propagateActivity=false
na obou stranách ProcessMessage nezoznačuje, do které aktivity ProcessAction se má přenést. Proto se vyvolá nová dočasná aktivita ProcessAction s novým ID. Když se asynchronní odpověď shoduje s požadavkem v kódu ServiceModel, ID aktivity lze načíst z místního kontextu. Skutečnou aktivitu ProcessAction lze přenést s tímto ID.
Asynchronní klient se zpětným voláním
Tento scénář přidá aktivity G a A pro zpětné volání a endCall
jejich přenosy do/ven.
Tato část ukazuje pouze použití HTTP s propagateActivity
=true
. Další aktivity a přenosy se však vztahují také na ostatní případy (to znamená propagateActivity
=false
, že pomocí protokolu TCP nebo pojmenovaného kanálu).
Zpětné volání vytvoří novou aktivitu (G), když klient zavolá kód uživatele, aby oznámil, že výsledky jsou připravené. Uživatelský kód pak volá endCall
v rámci zpětného volání (jak je znázorněno na obrázku 5) nebo mimo zpětné volání (obrázek 6). Protože není známo, ze které aktivity endCall
uživatele je volána, tato aktivita je označena A’
. Je možné, že A' může být identický nebo jiný než A.
Asynchronní server s zpětným voláním
Zásobník kanálu volá klienta při příjmu zpráv: trasování pro toto zpracování se vygeneruje v samotné aktivitě ProcessRequest.
Asynchronní požadavek nebo odpověď s chybami
Chyby chybové zprávy se zobrazují během endCall
. V opačném případě se aktivity a přenosy podobají předchozím scénářům.
Asynchronní jednosměrná cesta s chybami nebo bez nich
Klientovi se nevrátí žádná odpověď nebo chyba.