Freigeben über


Gewusst wie: Erstellen eines Anforderung-Antwort-Vertrags

Dieses Thema zeigt die grundlegenden Schritte zum Erstellen von Methoden, die einen Anforderung-Antwort-Vertrag verwenden. Solche Methoden rufen Vorgänge an einem Windows Communication Foundation (WCF)-Dienst auf und erwarten eine Antwort. Die Antwort muss gesendet und unter den Bedingungen dieses Vertrags mit der Anforderung in Beziehung gesetzt werden. Selbst wenn die Methode void zurückgibt, erstellt und sendet die Infrastruktur eine leere Nachricht, um dem Aufrufer mitzuteilen, dass die Methode einen Wert zurückgegeben hat. Die einzige Möglichkeit, die Erstellung und Versendung einer Antwortnachricht abzubrechen, besteht in der Verwendung eines unidirektionalen Vertrags für den Vorgang.

Weitere Informationen zum Angeben von Vorgangsverträgen finden Sie in der Beschreibung der OperationContractAttribute-Klasse und insbesondere der IsOneWay-Eigenschaft.

Weitere Informationen zum Erstellen einer Clientanwendung für einen Duplexvertrag finden Sie unter Gewusst wie: Zugreifen auf WCF-Dienste mit unidirektionalen und Anforderung-Antwort-Verträgen.

So erstellen Sie einen Anforderung-Antwort-Vertrag

  1. Erstellen Sie einen Dienstvertrag, indem Sie die ServiceContractAttribute-Klasse auf die Schnittstelle anwenden, die die Methoden definiert, die der Dienst implementieren soll.

  2. Geben Sie an, welche Methoden in der Schnittstelle der Client aufrufen kann, indem Sie die OperationContractAttribute-Klasse auf die Methoden anwenden.

  3. Der Wert der IsOneWay-Eigenschaft gibt an, ob ein Vorgang eine Antwortnachricht zurückgibt. Wenn ein Vorgang einen Anforderung-Antwort-Vertrag aufweist, wird diese Eigenschaft auf false festgelegt. Wenn der Vorgang über einen unidirektionalen Vertrag verfügt, wird die Eigenschaft auf true festgelegt. Alle Vorgänge mit der OperationContractAttribute-Klasse erfüllen standardmäßig einen Anforderung-Antwort-Vertrag, weil die IsOneWay-Eigenschaft standardmäßig false lautet. Deshalb kann der Wert der Attributeigenschaft optional explizit auf false festgelegt werden.

Beispiel

Im folgenden Beispiel wird ein Vertrag für einen Rechnerdienst definiert, der die Add-Methode und die Subtract-Methode bereitstellt. Ein Client ruft die Add-Methode und die Subtract-Methode mit diesem Vertrag auf und wartet darauf, dass die Summe bzw. die Differenz zurückgegeben wird. Die Multiply-Methode ist nicht Teil des Vertrags, weil sie von der OperationContractAttribute-Klasse nicht gekennzeichnet wurde und somit nicht für Clients verfügbar ist.

using System.ServiceModel; 

[ServiceContract] 
public interface ICalculator 
{ 
[OperationContract] 
// It would be equivalent to write explicitly:
// [OperationContract(IsOneWay=false)] 
int Add(int a, int b); 

[OperationContract] 
int Subtract(int a, int b); 

int Multiply(int a, int b)
}
  • Das Markieren einer Dienstvertragschnittstelle mit der ServiceContractAttribute-Klasse und ihren Methoden mit der OperationContractAttribute-Klasse ermöglicht die automatische Generierung von Dienstvertragdefinitionen in WSDL (Web Services Description Language), Clientverträgen und Code, sobald der Dienst bereitgestellt wird.
  • Auf eine extern sichtbare Definition eines WCF-Dienstvertrags kann zugegriffen werden, sobald der Dienst als WSDL-Standarddokument, das die Vorgänge und ihre entsprechende Ein- und Ausgabe angibt, bereitgestellt wurde. WSDL wird angezeigt, indem die ?wsdl-Abfrage an die HTTP-Basisadresse für den Dienst angehängt wird und der Browser auf den sich ergebenden URI (Uniform Resource Identifier) zeigt.

Siehe auch

Aufgaben

Gewusst wie: Erstellen eines Duplexvertrags

Referenz

OperationContractAttribute

Konzepte

Entwerfen von Dienstverträgen