Scenari asincroni con trasporti HTTP, TCP o pipe con nomeAsynchronous Scenarios using HTTP, TCP, or Named-Pipe

In questo argomento vengono descritti attività e trasferimenti per vari scenari Request/Reply asincroni, con richieste multithreading che utilizzano HTTP, TCP o named pipe.This topic describes the activities and transfers for different asynchronous request/reply scenarios, with multithreaded requests using HTTP, TCP, or named pipe.

Request/Reply asincroni senza erroriAsynchronous Request/Reply without Errors

Contenuto della sezione vengono descritti attività e trasferimenti per uno scenario Request/Reply asincrono, con client multithreading.This section describes the activities and transfers for an asynchronous request/reply scenario, with multithreaded clients.

L'attività del chiamante termina quando viene restituito beginCall e viene restituito endCall.The caller activity terminates when beginCall returns, and endCall returns. Se viene chiamato un callback, viene restituito il callback.If a callback is called, the callback returns.

L'attività chiamata termina quando viene restituito beginCall, viene restituito endCall o quando viene restituito il callback, se chiamato da tale attività.The called activity terminates when beginCall returns, endCall returns, or when the callback returns if it was called from that activity.

Client asincrono senza callbackAsynchronous Client without Callback

La propagazione è attivata su entrambi i lati, con l'utilizzo di HTTPPropagation is Enabled on Both Sides, using HTTP

Scenari asincroniAsynchronous scenarios

Figura 1.Figure 1. Client asincrono, senza callback, propagateActivity = true su entrambi i lati, HTTPAsynchronous client, no callback, propagateActivity=true on both sides, HTTP

Se propagateActivity = true, ProcessMessage indica l'attività ProcessAction da trasferire.If propagateActivity=true, ProcessMessage indicates which ProcessAction activity to transfer to.

Per gli scenari basati su HTTP, ReceiveBytes viene richiamato nel primo messaggio da inviare ed esiste per la durata della richiesta.For HTTP-based scenarios, ReceiveBytes is invoked on the first message to send, and exists for the lifetime of the request.

La propagazione è disattivata su uno dei due lati, con l'utilizzo di HTTPPropagation is Disabled on Either Sides, using HTTP

Se propagateActivity = false su un lato, ProcessMessage non indica l'attività ProcessAction da trasferire.If propagateActivity=false on either side, ProcessMessage does not indicate which ProcessAction activity to transfer to. Pertanto, viene richiamata una nuova attività ProcessAction temporanea con un nuovo ID.Therefore, a new temporary ProcessAction activity with a new ID is invoked. Quando la risposta asincrona viene abbinata alla richiesta nel codice di ServiceModel, l'ID attività può essere recuperato dal contesto locale.When the asynchronous response is matched to the request in ServiceModel code, the Activity ID can be retrieved from the local context. L'effettiva attività ProcessAction può essere trasferita con tale ID.The actual ProcessAction activity can be transferred to with that ID.

Scenari asincroni con HTTP/TCP/Named PipesAsynchronous scenarios using HTTP/TCP/Named Pipe

Figura 2.Figure 2. Client asincrono, senza callback, propagateActivity = false su entrambi i lati, HTTPAsynchronous client, no callback, propagateActivity=false on either side, HTTP

Per gli scenari basati su HTTP, ReceiveBytes viene richiamato nel primo messaggio da inviare ed esiste per la durata della richiesta.For HTTP-based scenarios, ReceiveBytes is invoked on the first message to send, and exists for the lifetime of the request.

Un'attività elaborazione azione viene creata in un client asincrono quando propagateActivity = false nel chiamante o chiamato e quando il messaggio di risposta non include un'intestazione Action.A Process Action activity is created on an asynchronous client when propagateActivity=false at the caller or callee, and when the response message does not include an Action header.

La propagazione è attivata su entrambi i lati, con l'utilizzo di TCP o named pipePropagation is Enabled on Both Sides, using TCP or Named Pipe

Scenari asincroni con HTTP/TCP/Named PipesAsynchronous scenarios using HTTP/TCP/Named Pipe

Figura 3.Figure 3. Client asincrono, senza callback, propagateActivity = true su entrambi i lati, Named Pipe/TCPAsynchronous client, no callback, propagateActivity=true on both sides, Named-Pipe/TCP

Per uno scenario basato su named pipe o TCP, ReceiveBytes viene richiamato quando il client è aperto ed esiste per la durata della connessione.For a Named-Pipe or TCP-based scenario, ReceiveBytes is invoked when the client is opened, and exists for the lifetime of the connection.

Come nella figura 1, se propagateActivity = true, ProcessMessage indica l'attività ProcessAction da trasferire.Similar to Figure 1, if propagateActivity=true, ProcessMessage indicates which ProcessAction activity to transfer to.

La propagazione è disattivata su uno dei due lati, con l'utilizzo di TCP o named pipePropagation is Disabled on Either Sides, using TCP or Named Pipe

Per uno scenario basato su named pipe o TCP, ReceiveBytes viene richiamato quando il client è aperto ed esiste per la durata della connessione.For a Named-Pipe or TCP-based scenario, ReceiveBytes is invoked when the client is opened, and exists for the lifetime of the connection.

Come nella figura 2, se propagateActivity = false su un lato, ProcessMessage non indica l'attività ProcessAction da trasferire.Similar to Fig.2, If propagateActivity=false on either side, ProcessMessage does not indicate which ProcessAction activity to transfer to. Pertanto, viene richiamata una nuova attività ProcessAction temporanea con un nuovo ID.Therefore, a new temporary ProcessAction activity with a new ID is invoked. Quando la risposta asincrona viene abbinata alla richiesta nel codice di ServiceModel, l'ID attività può essere recuperato dal contesto locale.When the asynchronous response is matched to the request in ServiceModel code, the Activity ID can be retrieved from the local context. L'effettiva attività ProcessAction può essere trasferita con tale ID.The actual ProcessAction activity can be transferred to with that ID.

Scenari asincroni con HTTP/TCP/ Named PipesAsynchronous scenarios using HTTP/TCP/ Named Pipes

Figura 4.Figure 4. Client asincrono, senza callback, propagateActivity = false su entrambi i lati, Named Pipe/TCPAsynchronous client, no callback, propagateActivity=false on either side, Named-Pipe/TCP

Client asincrono con callbackAsynchronous client with Callback

Questo scenario aggiunge attività G e A', per il callback e endCall, e i rispettivi trasferimenti dentro/fuori.This scenario adds activities G and A’, for the callback and endCall, and their transfers in/out.

Questa sezione viene illustrata solo l'utilizzo di HTTP con propragateActivity = true.This section only demonstrates using HTTP with propragateActivity=true. Tuttavia, l'attività e trasferimenti aggiuntivi si applicano anche agli altri casi (ovvero, propagateActivity = false, utilizzando TCP o Named Pipe).However, the additional activities and transfers also apply to the other cases (that is, propagateActivity=false, using TCP or Named-Pipe).

Il callback crea un'attività nuova (G) quando il client chiama codice utente per notificare che i risultati sono pronti.The callback creates a new activity (G) when the client calls user code to notify that results are ready. Il codice utente chiama quindi endCall all'interno del callback (come mostrato in Figura 5) o fuori del callback (Figura 6).User code then calls endCall within the callback (as shown in Figure 5) or outside the callback (Figure 6). Poiché non è noto quale attività utente endCall viene chiamata da questa attività viene etichettata A’.Because it is not known which user activity endCall is being called from, this activity is labeled A’. È possibile che A' sia identico ad A o diverso.It is possible that A’ can be identical to or different from A.

Scenari asincroniAsynchronous scenarios

Figura 5.Figure 5. Client asincrono con callback, endCall all'interno del callbackAsynchronous client with callback, endCall in Callback

Scenari asincroniAsynchronous Scenarios

Figura 6.Figure 6. Client asincrono con callback, endCall esternamente al callbackAsynchronous client with callback, endCall outside of Callback

Server asincrono con callbackAsynchronous Server with Callback

Scenari asincroni con HTTP/TCP/ denominato-PipeAsynchronous scenarios using HTTP/TCP/ Named-Pipe

Figura 7.Figure 7. Server asincrono con callbackAsynchronous server, with callback

Le stack dei canali richiama il client in Messaggio Ricevere: le tracce di questa elaborazione vengono create nell'attività ProcessRequest stessa.The channel stack calls back the client on Message Receive: traces for this processing are emitted in the ProcessRequest activity itself.

Request/Reply asincroni con erroriAsynchronous Request/Reply with Errors

I messaggi di errore vengono ricevuti durante endCall.Fault message errors are received during endCall. In caso contrario, attività e trasferimenti sono simili agli scenari precedenti.Otherwise, activities and transfers are similar to previous scenarios.

Unidirezionale asincrono con o senza erroriAsynchronous One-Way with or without Errors

Al client non vengono restituite risposte né errori.No response or fault is returned to the client.