Vorgehensweise: Erstellen eines unidirektionalen Vertrags

Dieses Thema zeigt die grundlegenden Schritte zum Erstellen von Methoden, die einen unidirektionalen Vertrag verwenden. Solche Methoden rufen von einem Client aus Vorgänge für einen WCF-Dienst (Windows Communication Foundation) auf, erwarten aber keine Antwort. Dieser Vertragstyp kann verwendet werden, um z. B. Benachrichtigungen für viele Abonnenten zu veröffentlichen. Sie können unidirektionale Verträge auch beim Erstellen eines Duplexvertrags (bidirektionalen Vertrags) verwenden. Dies ermöglicht eine unabhängige Kommunikation zwischen Clients und Servern, sodass beide Aufrufe des jeweils anderen initiieren können. So wird insbesondere dem Server ermöglicht, unidirektionale Aufrufe an den Client durchzuführen, die der Client als Ereignisse behandeln kann. Ausführliche Informationen zum Angeben von unidirektionalen Methoden finden Sie in der Beschreibung zur IsOneWay-Methode und zur OperationContractAttribute-Klasse.

Weitere Informationen zum Erstellen einer Clientanwendung für einen Duplexvertrag finden Sie unter Vorgehensweise: Zugreifen auf Dienste mit unidirektionalen und Anforderung-Antwort-Verträgen. Ein funktionierendes Beispiel stellt das Beispiel Unidirektional dar.

So erstellen Sie einen unidirektionalen 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 ein Client aufrufen kann, indem Sie die OperationContractAttribute-Klasse auf die Methoden anwenden.

  3. Definieren Sie die Vorgänge, die keine unidirektionale Ausgabe (keinen Rückgabewert und keine out- oder ref-Parameter) haben dürfen, indem Sie die IsOneWay-Eigenschaft auf true festlegen. Beachten Sie, dass alle Vorgänge mit der OperationContractAttribute-Klasse standardmäßig einen Anforderung-Antwort-Vertrag erfüllen, weil die IsOneWay-Eigenschaft standardmäßig false lautet. Wenn Sie einen unidirektionalen Vertrag für die Methode definieren möchten, müssen Sie den Wert der Attributeigenschaft folglich explizit auf true festlegen.

Beispiel

Im folgenden Codebeispiel wird ein Vertrag für einen Dienst definiert, der mehrere unidirektionale Methoden besitzt. Alle diese Methoden haben unidirektionale Verträge mit Ausnahme von Equals, das standardmäßig auf Anforderung-Antwort festgelegt ist und ein Ergebnis zurückgibt.

[ServiceContract(Namespace="http://Microsoft.ServiceModel.Samples", SessionMode=SessionMode.Required)]
public interface ICalculatorSession
{
    [OperationContract(IsOneWay=true)]
    void Clear();
    [OperationContract(IsOneWay = true)]
    void AddTo(double n);
    [OperationContract(IsOneWay = true)]
    void SubtractFrom(double n);
    [OperationContract(IsOneWay = true)]
    void MultiplyBy(double n);
    [OperationContract(IsOneWay = true)]
    void DivideBy(double n);
    [OperationContract]
    double Equals();
}
<ServiceContract(Namespace:="http://Microsoft.ServiceModel.Samples", SessionMode:=SessionMode.Required)> _
Public Interface ICalculatorSession

    <OperationContract(IsOneWay:=True)> _
    Sub Clear()
    <OperationContract(IsOneWay:=True)> _
    Sub AddTo(ByVal n As Double)
    <OperationContract(IsOneWay:=True)> _
    Sub SubtractFrom(ByVal n As Double)
    <OperationContract(IsOneWay:=True)> _
    Sub MultiplyBy(ByVal n As Double)
    <OperationContract(IsOneWay:=True)> _
    Sub DivideBy(ByVal n As Double)
    <OperationContract()> _
    Function Equal() As Double
End Interface

Siehe auch