Partager via


Scénarios synchrones utilisant HTTP, TCP ou Canal nommé

Cette rubrique décrit les activités et transferts pour différents scénarios de demande/réponse asynchrones, avec des demandes multithread utilisant une connexion HTTP, TCP ou de canal nommé.

Demande/réponse asynchrone sans erreurs

Cette section décrit les activités et transferts pour un scénario de demande/réponse asynchrone, avec des clients multithread.

L'activité de l'appelant se termine lorsque beginCall est retourné et endCall est retourné. Si un rappel est appelé, celui-ci est retourné.

L'activité appelée se termine lorsque beginCall est retourné, endCall est retourné, ou lorsque le rappel est retourné s'il a été appelé à partir de cette activité.

Client asynchrone sans rappel

La propagation est activée de chaque côté, avec HTTP

Scénarios asynchrones

Figure 1. Client asynchrone, sans rappel, propagateActivity=true de chaque côté, HTTP

Si propagateActivity=true, ProcessMessage indique l'activité ProcessAction vers laquelle exécuter le transfert.

Pour les scénarios HTTP, l'activité ReceiveBytes est appelée sur le premier message à envoyer et existe pendant la durée de vie de la demande.

La propagation est désactivée d'un côté ou de l'autre, avec HTTP

Si propagateActivity=false d'un côté ou de l'autre, ProcessMessage n'indique pas l'activité ProcessAction vers laquelle exécuter le transfert. Par conséquent, une nouvelle activité ProcessAction temporaire, avec un nouvel ID, est appelée. Lorsque la réponse asynchrone est mise en correspondance avec la demande dans le code ServiceModel, l'ID d'activité peut être récupéré du contexte local. Cet ID permet d'effectuer un transfert vers l'activité ProcessAction réelle.

Scénarios asynchrones utilisant HTTP/TCP/Canal nommé

Figure 2. Client asynchrone, sans rappel, propagateActivity=false d'un côté ou de l'autre, HTTP

Pour les scénarios HTTP, l'activité ReceiveBytes est appelée sur le premier message à envoyer et existe pendant la durée de vie de la demande.

Une activité Traiter l'action est créée sur un client asynchrone lorsque propagateActivity=false au niveau de l'appelant ou de l'appelé, et lorsque le message de réponse n'inclut pas d'en-tête Action header.

La propagation est activée de chaque côté, avec TCP ou Canal nommé

Scénarios asynchrones utilisant HTTP/TCP/Canal nommé

Figure 3. Client asynchrone, sans rappel, propagateActivity=true de chaque côté, Canal nommé/TCP

Pour un scénario Canal nommé ou TCP, l'activité ReceiveBytes est appelée lorsque le client est ouvert, et existe pendant la durée de vie de la connexion.

Identique à la figure 1, si propagateActivity=true, ProcessMessage indique l'activité ProcessAction vers laquelle exécuter le transfert.

La propagation est désactivée d'un côté ou de l'autre, avec TCP ou Canal nommé

Pour un scénario Canal nommé ou TCP, l'activité ReceiveBytes est appelée lorsque le client est ouvert, et existe pendant la durée de vie de la connexion.

Identique à la figure 2, si propagateActivity=false d'un côté ou de l'autre, ProcessMessage n'indique pas l'activité ProcessAction vers laquelle exécuter le transfert. Par conséquent, une nouvelle activité ProcessAction temporaire avec un nouvel ID est appelée. Lorsque la réponse asynchrone est mise en correspondance avec la demande dans le code ServiceModel, l'ID d'activité peut être récupéré du contexte local. Cet ID permet d'effectuer un transfert vers l'activité ProcessAction réelle.

Scénarios asynchrones utilisant HTTP/TCP/Canaux nommés

Figure 4. Client asynchrone, sans rappel, propagateActivity=false d'un côté ou de l'autre, Canal nommé/TCP

Client asynchrone avec rappel

Ce scénario ajoute les activités G et A', pour le rappel et endCall, et leurs transferts entrants/sortants.

Cette section montre seulement l'utilisation de HTTP lorsque propragateActivity=true. Toutefois, les activités et transferts supplémentaires s'appliquent également aux autres cas (c'est-à-dire, propagateActivity=false, avec TCP ou Canal nommé).

Le rappel crée une activité (G) lorsque le client appelle le code utilisateur pour notifier que les résultats sont prêts. Le code utilisateur appelle endCall à l'intérieur du rappel (tel qu'indiqué dans la figure 5) ou à l'extérieur du rappel (figure 6). Comme il est impossible de déterminer à partir de quelle activité utilisateur endCall est appelé, cette activité est étiquetée A’. L'activité A' peut être identique ou différente de l'activité A.

Scénarios asynchrones

Figure 5. Client asynchrone avec rappel, endCall à l'intérieur du rappel

Scénarios asynchrones

Figure 6. Client asynchrone avec rappel, endCall à l'extérieur du rappel

Serveur asynchrone avec rappel

Scénarios asynchrones utilisant HTTP/TCP/Canal nommé

Figure 7. Serveur asynchrone, avec rappel

La pile de canaux rappelle le client à la réception des messages : les traces de ce processus sont émises dans l'activité ProcessRequest elle-même.

Demande/Réponse asynchrone avec erreurs

Des messages d'erreur sont reçus au cours de endCall. Sinon, les activités et transferts sont identiques aux scénarios précédents.

Communication unidirectionnelle asynchrone avec ou sans erreurs

Aucune réponse ou erreur n'est renvoyée au client.