Scenariusze asynchroniczne z zastosowaniem protokołu HTTP lub TCP albo potoku nazwanego
W tym temacie opisano działania i transfery dla różnych scenariuszy asynchronicznych żądań/odpowiedzi z wielowątkowymi żądaniami przy użyciu protokołu HTTP, TCP lub nazwanego potoku.
Asynchroniczne żądanie/odpowiedź bez błędów
W tej sekcji opisano działania i transfery dla scenariusza asynchronicznego żądania/odpowiedzi z wielowątkowymi klientami.
Działanie wywołujące kończy się po beginCall
powrocie i endCall
zwraca. Jeśli wywołanie zwrotne jest wywoływane, wywołanie zwrotne zwraca wartość .
Wywoływane działanie kończy się po beginCall
zwracaniu, endCall
zwracaniu lub zwracaniu wywołania zwrotnego, jeśli zostało ono wywołane z tego działania.
Klient asynchroniczny bez wywołania zwrotnego
Propagacja jest włączona po obu stronach przy użyciu protokołu HTTP
Jeśli propagateActivity=true
, ProcessMessage wskazuje, do którego działania ProcessAction ma być przenoszone.
W przypadku scenariuszy opartych na protokole HTTP funkcja ReceiveBytes jest wywoływana w pierwszym komunikacie do wysłania i istnieje przez okres istnienia żądania.
Propagacja jest wyłączona po obu stronach przy użyciu protokołu HTTP
Jeśli propagateActivity=false
po obu stronach, ProcessMessage nie wskazuje, do którego działania ProcessAction ma być przenoszone. W związku z tym wywoływane jest nowe tymczasowe działanie ProcessAction z nowym identyfikatorem. Gdy odpowiedź asynchroniczna jest zgodna z żądaniem w kodzie ServiceModel, identyfikator działania można pobrać z kontekstu lokalnego. Rzeczywiste działanie ProcessAction można przenieść do tego identyfikatora.
W przypadku scenariuszy opartych na protokole HTTP funkcja ReceiveBytes jest wywoływana w pierwszym komunikacie do wysłania i istnieje przez okres istnienia żądania.
Działanie akcji procesu jest tworzone na kliencie asynchronicznym podczas propagateActivity=false
wywoływania lub wywoływania, a gdy komunikat odpowiedzi nie zawiera nagłówka Akcja.
Propagacja jest włączona po obu stronach przy użyciu protokołu TCP lub nazwanego potoku
W przypadku scenariusza nazwanego potoku lub tcp wywoływana jest funkcja ReceiveBytes po otwarciu klienta i istnieje przez okres istnienia połączenia.
Podobnie jak w przypadku pierwszego obrazu, jeśli propagateActivity=true
, ProcessMessage wskazuje, do którego działania ProcessAction ma być przenoszone.
Propagacja jest wyłączona po obu stronach przy użyciu potoku TCP lub nazwanego potoku
W przypadku scenariusza nazwanego potoku lub tcp wywoływana jest funkcja ReceiveBytes po otwarciu klienta i istnieje przez okres istnienia połączenia.
Podobnie jak drugi obraz, jeśli propagateActivity=false
po obu stronach, ProcessMessage nie wskazuje działania ProcessAction do przeniesienia. W związku z tym wywoływane jest nowe tymczasowe działanie ProcessAction z nowym identyfikatorem. Gdy odpowiedź asynchroniczna jest zgodna z żądaniem w kodzie ServiceModel, identyfikator działania można pobrać z kontekstu lokalnego. Rzeczywiste działanie ProcessAction można przenieść do tego identyfikatora.
Klient asynchroniczny z wywołaniem zwrotnym
Ten scenariusz dodaje działania G i A", dla wywołania zwrotnego i endCall
, oraz ich transfery w/wy.
W tej sekcji pokazano tylko użycie protokołu HTTP z propagateActivity
=true
programem . Jednak dodatkowe działania i transfery dotyczą również innych przypadków (czyli propagateActivity
=false
przy użyciu protokołu TCP lub nazwanego potoku).
Wywołanie zwrotne tworzy nowe działanie (G), gdy klient wywołuje kod użytkownika, aby powiadomić, że wyniki są gotowe. Następnie kod użytkownika wywołuje wywołanie endCall
zwrotne (jak pokazano na rysunku 5) lub poza wywołaniem zwrotnym (Rysunek 6). Ponieważ nie wiadomo, z którego działania endCall
użytkownika jest wywoływane, to działanie ma etykietę A’
. Możliwe, że wartość A może być identyczna lub inna niż A.
Serwer asynchroniczny z wywołaniem zwrotnym
Stos kanału wywołuje klienta w funkcji Odbieranie komunikatów: ślady dla tego przetwarzania są emitowane w samym działaniu ProcessRequest.
Asynchroniczne żądanie/odpowiedź z błędami
Błędy komunikatów o błędach są odbierane podczas .endCall
W przeciwnym razie działania i transfery są podobne do poprzednich scenariuszy.
Asynchroniczne jednokierunkowe z błędami lub bez nich
Do klienta nie jest zwracana żadna odpowiedź ani błąd.