Freigeben über


Gewusst wie: Erstellen eines Duplexvertrags

Dieses Thema zeigt die grundlegenden Schritte zum Erstellen von Methoden, die einen Duplexvertrag (bidirektionalen Vertrag) verwenden. Ein Duplexvertrag ermöglicht die unabhängige Kommunikation zwischen Clients und Servern, sodass beide Aufrufe des jeweils Anderen initiieren können. Der Duplexvertrag ist eines der drei Nachrichtenmuster, die für Windows Communication Foundation (WCF)-Dienste verfügbar sind. Die anderen beiden Nachrichtenmuster zeichnen sich durch unidirektionale Anforderungen bzw. Antworten aus. Ein Duplexvertrag besteht aus zwei unidirektionalen Verträgen zwischen Client und Server und erfordert nicht, dass die Methodenaufrufe korrelieren. Sie verwenden diese Art von Vertrag, wenn der Dienst vom Client weitere Informationen anfordern muss oder auf dem Client ausdrücklich Ereignisse auslösen muss. Weitere Informationen zur Erstellung einer Clientanwendung für einen Duplexvertrag finden Sie unter Gewusst wie: Zugreifen auf Dienste mit einem Duplexvertrag. Ein Arbeitsbeispiel finden Sie im Beispiel Service Contract: Duplex.

So erstellen Sie einen Duplexvertrag

  1. Erstellen Sie die Schnittstelle, die die Serverseite des Duplexvertrags bildet.

  2. Wenden Sie die ServiceContractAttribute-Klasse auf die Schnittstelle an.

  3. Deklarieren Sie die Methodensignaturen in der Schnittstelle.

  4. Wenden Sie die OperationContractAttribute-Klasse auf jede Methodensignatur an, die Teil des öffentlichen Vertrags werden muss.

  5. Erstellen Sie die Rückrufschnittstelle, mit der die Vorgänge definiert werden, die vom Dienst auf dem Clientendpunkt aufgerufen werden können.

  6. Deklarieren Sie die Methodesignaturen in der Rückrufschnittstelle.

  7. Wenden Sie die OperationContractAttribute-Klasse auf jede Methodensignatur an, die Teil des öffentlichen Vertrags werden muss.

  8. Verknüpfen Sie die beiden Schnittstellen zu einem Duplexvertrag, indem Sie die CallbackContract-Eigenschaft der primären Schnittstelle auf den Typ der Rückrufschnittstelle festlegen.

So rufen Sie Methoden auf dem Client auf

  1. Deklarieren Sie in der Dienstimplementierung des primären Vertrags eine Variable für die Rückrufschnittstelle.

  2. Legen Sie die Variable auf den von der GetCallbackChannel-Methode der OperationContext-Klasse zurückgegebenen Objektverweis fest.

  3. Rufen Sie die in der Rückrufschnittstelle definierten Methoden auf.

Beispiel

Der folgende Beispielcode veranschaulicht die Duplexkommunikation. Der Vertrag des Diensts enthält Dienstvorgänge zum vorwärts- und rückwärtsgerichteten Navigieren. Der Vertrag des Clients enthält einen Dienstvorgang zur Ausgabe seiner Position.

  • Durch Anwenden des ServiceContractAttribute-Attributs und des OperationContractAttribute-Attributs wird die automatische Generierung von Dienstvertragsdefinitionen in WSDL (Web Services Description Language) ermöglicht.
  • Verwenden Sie das ServiceModel Metadata Utility Tool (Svcutil.exe), um das WSDL-Dokument und (optional) den Code und die Konfiguration für einen Client abzurufen.
  • Endpunkte, die Duplexdienste verfügbar machen, müssen geschützt werden. Wenn ein Dienst eine Duplexnachricht empfängt, überprüft er das ReplyTo-Element in dieser eingehenden Nachricht, um zu bestimmen, wohin die Antwort gesendet werden soll. Wenn der zum Empfangen der Nachricht verwendete Kanal nicht geschützt ist, kann ein nicht vertrauenswürdiger Client eine bösartige Meldung mit dem ReplyTo-Element eines Zielcomputers senden, was auf diesem Zielcomputer zu einem Denial Of Service (DOS) führt. Bei gewöhnlichen Anforderung-Antwort-Nachrichten stellt dies kein Problem dar, weil das ReplyTo-Element ignoriert und die Antwort auf dem Kanal gesendet wird, auf dem die ursprüngliche Nachricht empfangen wurde.

Siehe auch

Aufgaben

Gewusst wie: Zugreifen auf Dienste mit einem Duplexvertrag
Gewusst wie: Definieren eines Windows Communication Foundation-Dienstvertrags

Referenz

ServiceContractAttribute
OperationContractAttribute

Konzepte

Entwerfen und Implementieren von Diensten

Weitere Ressourcen

Service Contract: Duplex
Service Contract: Session