Scenari sincroni con trasporti HTTP, TCP o pipe con nomeSynchronous Scenarios using HTTP, TCP or Named-Pipe

In questo argomento vengono descritte le attività e i trasferimenti di esecuzione in vari scenari request/reply sincroni che prevedono un client a thread singolo e che utilizzano un trasporto HTTP, TCP o pipe con nome.This topic describes the activities and transfers for different synchronous request/reply scenarios, with a single-threaded client, using HTTP, TCP or named pipe. Vedere scenari asincroni con HTTP, TCP o Named Pipe per ulteriori informazioni sulle richieste a thread multipli.See Asynchronous Scenarios using HTTP, TCP, or Named-Pipe for more information on multi-threaded requests.

Request/reply sincrono senza erroriSynchronous Request/Reply without Errors

Contenuto della sezione vengono descritte le attività e i trasferimenti di esecuzione in uno scenario request/reply sincrono senza errori con un client a thread singolo.This section describes the activities and transfers for a valid synchronous request/reply scenario, with single-threaded client.

ClientClient

Apertura delle comunicazioni con un endpoint di servizioEstablishing Communication with Service Endpoint

Un client viene costruito e aperto.A client is constructed and opened. Per ognuno di questi passaggi, l'attività di ambiente (A) viene trasferita a un "Costruzione Client" (B) e "Apertura Client" (C) attività rispettivamente.For each of these steps, the ambient activity (A) is transferred to a "Construct Client" (B) and "Open Client" (C) activity respectively. Ogni volta che viene trasferita a un'altra attività, l'attività di ambiente viene sospesa fino al trasferimento di restituzione, ovvero fino all'esecuzione del codice di ServiceModel.For each activity being transferred to, the ambient activity is suspended until there is a transfer back, that is, until ServiceModel code is executed.

Invio di una richiesta all'endpoint di servizioMaking a Request to Service Endpoint

L'attività di ambiente viene trasferita a un'attività "ProcessAction" (D).The ambient activity is transferred to a "ProcessAction" (D) activity. Questa attività prevede l'invio di un messaggio di richiesta e la ricezione di un messaggio di risposta.Within this activity, a request message is sent, and a response message is received. L'attività termina quando il controllo viene restituito al codice utente.The activity ends when control returns to user code. Poiché si tratta di una richiesta sincrona, l'attività di ambiente viene sospesa fino alla restituzione del controllo.Because this is a synchronous request, the ambient activity suspends until control returns.

Chiusura delle comunicazioni con un endpoint di servizioClosing Communication with Service Endpoint

L'attività di chiusura del client (I) viene creata a partire dall'attività di ambiente.The client's close activity (I) is created from the ambient activity. Il comportamento è identico a quelli di apertura e di creazione.This is identical to new and open.

ServerServer

Configurazione di un ServiceHostSetting up a Service Host

Le attività di creazione (N) e di apertura (O) di ServiceHost vengono create a partire dall'attività di ambiente (M).The ServiceHost’s new and open activities (N and O) are created from the ambient activity (M).

Un'attività di listener (P) viene creata tramite l'apertura di un ServiceHost per ogni listener.A listener activity (P) is created from opening a ServiceHost for each listener. L'attività di listener attende la ricezione e l'elaborazione dei dati.The listener activity waits to receive and process data.

Ricezione di dati in transitoReceiving Data on the Wire

All'arrivo dei dati in transito, un'attività "ReceiveBytes" viene creata se non esiste già (Q) per elaborare i dati ricevuti.When data arrives on the wire, a "ReceiveBytes" activity is created if it does not already exist (Q) to process the received data. Inoltre, questa attività può essere riutilizzata per più messaggi appartenenti a una connessione o a una coda.This activity can be reused for multiple messages within a connection or queue.

Se dispone di una quantità sufficiente di dati per formare un messaggio di azione SOAP, l'attività "ReceiveBytes" avvia un'attività "ProcessMessage" (R).The ReceiveBytes activity launches a ProcessMessage activity (R) if it has enough data to form a SOAP action message.

L'attività R prevede l'elaborazione delle intestazioni di messaggio e la verifica dell'intestazione activityID.In activity R, the message headers are processed, and the activityID header is verified. Se questa intestazione è presente, l'ID attività viene impostato sull'attività "ProcessAction". In caso contrario, viene creato un nuovo ID.If this header is present, the activity ID is set to the ProcessAction activity; otherwise, a new ID is created.

Quando la chiamata viene elaborata, l'attività ProcessAction (S) viene creata e l'esecuzione viene trasferita a tale attività.ProcessAction activity (S) is created and being transferred to, when the call is processed. Questa attività termina al completamento di ogni elaborazione relativa al messaggio in ingresso, compresa l'esecuzione del codice utente (T) e, se necessario, l'invio del messaggio di risposta.This activity ends when all processing related to the incoming message is completed, including executing user code (T) and sending the response message if applicable.

Chiusura di un ServiceHostClosing a Service Host

L'attività di chiusura di un ServiceHost (Z) viene creata a partire dall'attività di ambiente.The ServiceHost’s close activity (Z) is created from the ambient activity.

Scenari sincroni con HTTP/TCP/ Named PipesSynchronous scenarios using HTTP/TCP/ Named Pipes

In <a: name >, A è un simbolo di scelta rapida che descrive l'attività contenuta nel testo precedente e nella tabella 3.In <A: name>, A is a shortcut symbol that describes the activity in the previous text and in table 3. mentre Name è un nome abbreviato dell'attività.Name is a shortened name of the activity.

Se propagateActivity = true, elaborazione azione nel client e servizio hanno lo stesso ID di attività.If propagateActivity=true, Process Action on both the client and service have the same activity ID.

Request/reply sincrono con erroriSynchronous Request/Reply with Errors

L'unica differenza rispetto allo scenario precedente è che viene restituito un messaggio di errore SOAP come messaggio di risposta.The only difference with the previous scenario is that a SOAP fault message is returned as a response message. Se propagateActivity = true, l'ID attività del messaggio di richiesta viene aggiunta al messaggio di errore SOAP.If propagateActivity=true, the activity ID of the request message is added to the SOAP fault message.

Unidirezionale sincrono senza erroriSynchronous One-Way without Errors

L'unica differenza rispetto al primo scenario è che non viene restituito alcun messaggio al server.The only difference with the first scenario is that no message is returned to the server. Inoltre, per i protocolli basati su HTTP, il sistema invia al client uno stato che indica l'eventuale presenza di errori.For HTTP-based protocols, a status (valid or error) is still returned to the client. Infatti, quest'ultimo è l'unico protocollo avente una semantica request / reply che fa parte dello stack di protocolli WCF.This is because HTTP is the only protocol with a request-response semantics that is part of the WCF protocol stack. Poiché l'elaborazione TCP è nascosta da WCF, viene inviato alcun acknowledgement al client.Because TCP processing is hidden from WCF, no acknowledgement is sent to the client.

Unidirezionale sincrono con erroriSynchronous One-Way with Errors

Se durante l'elaborazione del messaggio (Q o successivo) si verifica un errore, al client non viene restituita alcuna notifica.If an error occurs while processing the message (Q or beyond), no notification is returned to the client. Questo comportamento è identico allo scenario "Sincrono unidirezionale senza errori".This is identical to the "Synchronous One-Way without Errors" scenario. Se si desidera ricevere un messaggio di errore, evitare di utilizzare uno scenario unidirezionale.You should not use a One-Way scenario if you want to receive an error message.

DuplexDuplex

La differenza rispetto agli scenari precedenti è che il client, analogamente a un servizio di uno scenario asincrono, crea le attività "ReceiveBytes" e "ProcessMessage".The difference with the previous scenarios is that the client acts as a service, in which it creates the ReceiveBytes and ProcessMessage activities, similar to the Asynchronous scenarios.