Procedura: creare un contratto duplex

In questo argomento vengono illustrati i passaggi di base per creare metodi che utilizzano un contratto duplex (bidirezionale). Un contratto duplex consente ai client e ai server di comunicare tra loro in modo indipendente, affinché siano entrambi in grado di effettuare chiamate all'altro. Il contratto duplex è uno di tre modelli di messaggi disponibili per i servizi Windows Communication Foundation (WCF). Gli altri due modelli sono il modello unidirezionale e il modello request/reply. Un contratto duplex è costituito da due contratti unidirezionali tra il client e il server e non richiede che le chiamate al metodo siano correlate. Utilizzare questo tipo di contratto quando il servizio deve richiedere al client ulteriori informazioni o generare in modo esplicito eventi sul client. Per ulteriori informazioni sulla creazione di un'applicazione client per un contratto duplex, vedere Procedura: accedere ai servizi con un contratto duplex. Per un esempio funzionante, vedere Service Contract: Duplex.

Per creare un contratto duplex

  1. Creare l'interfaccia che rappresenta il lato server del contratto duplex.

  2. Applicare la classe ServiceContractAttribute all'interfaccia.

  3. Dichiarare le firme del metodo nell'interfaccia.

  4. Applicare la classe OperationContractAttribute a ogni firma del metodo che deve essere parte del contratto pubblico.

  5. Creare l'interfaccia di callback che definisce l'insieme delle operazioni che il servizio può richiamare nel client.

  6. Dichiarare le firme del metodo nell'interfaccia di callback.

  7. Applicare la classe OperationContractAttribute a ogni firma del metodo che deve essere parte del contratto pubblico.

  8. Collegare le due interfacce in un contratto duplex impostando la proprietà CallbackContract nell'interfaccia primaria sul tipo dell'interfaccia di callback.

Per chiamare i metodi nel client.

  1. Nell'implementazione del servizio del contratto primario, dichiarare una variabile per l'interfaccia di callback.

  2. Impostare la variabile sul riferimento dell'oggetto restituito dal metodo GetCallbackChannel della classe OperationContext.

  3. Chiamare i metodi definiti dall'interfaccia di callback.

Esempio

Nell'esempio di codice seguente viene illustrata la comunicazione duplex. Il contratto del servizio contiene le operazioni del servizio per spostarsi avanti e indietro. Il contratto del client contiene un'operazione del servizio per segnalare la sua posizione.

  • L'applicazione degli attributi ServiceContractAttribute e OperationContractAttribute consente di generare automaticamente le definizioni del contratto di servizio nel linguaggio di descrizione dei servizi Web (WSDL, Web Services Description Language).
  • Utilizzare ServiceModel Metadata Utility Tool (Svcutil.exe) per recuperare il documento WSDL, il codice (facoltativo) e la configurazione per un client.
  • Gli endpoint che espongono servizi duplex devono essere protetti. Quando un servizio riceve un messaggio duplex, analizza l'elemento ReplyTo contenuto nel messaggio in arrivo per stabilire dove inviare la replica. Se il canale non è protetto, un client non attendibile potrebbe inviare un messaggio dannoso con un elemento ReplyTo del computer di destinazione, il che comporta un Denial of Service (DoS) del computer di destinazione. Con i messaggi request/reply normali, questo non è un problema, perché ReplyTo viene ignorato e la risposta viene inviata sul canale sul quale è arrivato il messaggio originale.

Vedere anche

Attività

Procedura: accedere ai servizi con un contratto duplex
Procedura: definire un contratto di servizio di Windows Communication Foundation

Riferimenti

ServiceContractAttribute
OperationContractAttribute

Concetti

Progettazione e implementazione di servizi

Altre risorse

Service Contract: Duplex
Service Contract: Session