Dela via


Asynkrona scenarier med HTTP, TCP eller Named-Pipe

Det här avsnittet beskriver aktiviteter och överföringar för olika asynkrona begärande-/svarsscenarier, med flertrådade begäranden med HTTP, TCP eller namngivet pipe.

Asynkron begäran/svar utan fel

I det här avsnittet beskrivs aktiviteter och överföringar för ett asynkront scenario för begäran/svar med flertrådade klienter.

Anroparaktiviteten avslutas när beginCall returnerar och endCall returnerar. Om ett återanrop anropas returneras återanropet.

Den anropade aktiviteten avslutas när beginCall returnerar, endCall returnerar eller när återanropet returneras om den anropades från den aktiviteten.

Asynkron klient utan återanrop

Spridning är aktiverad på båda sidor med HTTP

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

Om propagateActivity=trueanger ProcessMessage vilken ProcessAction-aktivitet som ska överföras till.

För HTTP-baserade scenarier anropas ReceiveBytes på det första meddelandet som ska skickas och finns under begärans livslängd.

Spridning är inaktiverad på båda sidor med hjälp av HTTP

Om propagateActivity=false på båda sidor anger ProcessMessage inte vilken ProcessAction-aktivitet som ska överföras till. Därför anropas en ny tillfällig ProcessAction-aktivitet med ett nytt ID. När det asynkrona svaret matchas med begäran i ServiceModel-koden kan aktivitets-ID hämtas från den lokala kontexten. Den faktiska ProcessAction-aktiviteten kan överföras till med det ID:t.

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

För HTTP-baserade scenarier anropas ReceiveBytes på det första meddelandet som ska skickas och finns under begärans livslängd.

En processåtgärdsaktivitet skapas på en asynkron klient när propagateActivity=false den anropar eller anropar, och när svarsmeddelandet inte innehåller ett åtgärdshuvud.

Spridning är aktiverad på båda sidor med hjälp av TCP eller namngivet rör

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

För ett scenario med namngivet rör eller TCP-baserat anropas ReceiveBytes när klienten öppnas och finns under anslutningens livslängd.

Liknar den första bilden, om propagateActivity=true, Anger ProcessMessage vilken ProcessAction-aktivitet som ska överföras till.

Spridning är inaktiverad på båda sidor med hjälp av TCP eller namngivet rör

För ett scenario med namngivet rör eller TCP-baserat anropas ReceiveBytes när klienten öppnas och finns under anslutningens livslängd.

På samma sätt som den andra bilden anger propagateActivity=false ProcessMessage inte vilken ProcessAction-aktivitet som ska överföras till på båda sidor. Därför anropas en ny tillfällig ProcessAction-aktivitet med ett nytt ID. När det asynkrona svaret matchas med begäran i ServiceModel-koden kan aktivitets-ID hämtas från den lokala kontexten. Den faktiska ProcessAction-aktiviteten kan överföras till med det ID:t.

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

Asynkron klient med återanrop

Det här scenariot lägger till aktiviteterna G och A för återanropet och endCall, och deras överföringar in/ut.

Det här avsnittet visar endast användning av HTTP med propagateActivity=true. De ytterligare aktiviteterna och överföringarna gäller dock även för de andra fallen (dvs propagateActivity=false. med hjälp av TCP eller Named-Pipe).

Återanropet skapar en ny aktivitet (G) när klienten anropar användarkod för att meddela att resultaten är klara. Användarkod anropar endCall sedan inom återanropet (som visas i bild 5) eller utanför återanropet (bild 6). Eftersom det inte är känt vilken användaraktivitet endCall som anropas från, är den här aktiviteten märkt A’. Det är möjligt att A kan vara identiskt med eller annorlunda än A.

Shows an asynchronous client with callback, endcall in callback.

Shows an asynchronous client with callback, endcall outside callback.

Asynkron server med återanrop

Shows an asynchronous server with callback.

Kanalstacken anropar klienten på Meddelande ta emot: spårningar för den här bearbetningen genereras i själva ProcessRequest-aktiviteten.

Asynkron begäran/svar med fel

Fel i felmeddelandet tas emot under endCall. Annars liknar aktiviteter och överföringar tidigare scenarier.

Asynkron enkelriktad med eller utan fel

Inget svar eller fel returneras till klienten.