Sdílet prostřednictvím


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.

Asynchronous client with no callback where propagateActivity is set to true on both sides.

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.

Asynchronous client with no callback where propagateActivity is set to false on either side.

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.

Asynchronous client with no callback where propagateActivity is set to true on both sides and named pipe/TCP.

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

Asynchronous client with no callback where propagateActivity is set to false on either side and named pipe/TCP.

Asynchronní klient se zpětným voláním

Tento scénář přidá aktivity G a A pro zpětné volání a endCalljejich 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.

Shows an asynchronous client with callback, endcall in callback.

Shows an asynchronous client with callback, endcall outside callback.

Asynchronní server s zpětným voláním

Shows an asynchronous server with callback.

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.