方法: 一方向コントラクトを作成する

ここでは、一方向コントラクトを使用するメソッドを作成するための基本手順を示します。 このようなメソッドは、Windows Communication Foundation (WCF) サービスの操作をクライアントから呼び出しますが、応答を待ちません。 この種のコントラクトは、たとえば、多数のサブスクライバーに対して通知を発行するために使用できます。 一方向コントラクトは、二重のコントラクトを作成する場合にも使用できます。その場合は、クライアントとサーバーが互いに独立して通信できるため、どちらからでも相手の呼び出しを開始できます。 これにより、特にサーバーは、クライアントがイベントとして処理できる一方向の呼び出しをクライアントに対して実行できます。 一方向メソッドの指定の詳細については、IsOneWay プロパティおよび OperationContractAttribute クラスのトピックを参照してください。

二重コントラクト用のクライアント アプリケーションの作成方法の詳細については、一方向および要求/応答コントラクトを使用した、サービスへのアクセス方法に関するページを参照してください。 作業用サンプルについては、「一方向」のサンプルを参照してください。

一方向コントラクトを作成するには

  1. サービスにより実装されるメソッドを定義するインターフェイスに ServiceContractAttribute クラスを適用することにより、サービス コントラクトを作成します。

  2. OperationContractAttribute クラスをメソッドに適用する際に、クライアントが呼び出すことのできるインターフェイスのメソッドを指定します。

  3. IsOneWay プロパティを true に設定することにより、出力を行わない (戻り値および出力または参照パラメーターを持たない) 一方向の操作を指定します。 OperationContractAttribute プロパティの既定値は IsOneWay であるため、false クラスを持つ操作では、既定で要求/応答コントラクトが満たされることに注意してください。 したがって、このメソッドに一方向コントラクトが必要な場合は、この属性プロパティの値を明示的に true に指定する必要があります。

複数の一方向メソッドを含むサービスのコントラクトを定義する方法を次のコード例に示します。 Equals (既定で応答/要求コントラクトに設定され、結果を返します) を除き、すべてのメソッドは一方向コントラクトを持ちます。

[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

関連項目