方法 : 要求/応答コントラクトを作成する
ここでは、要求/応答コントラクトを使用するメソッドを作成するための基本手順を示します。このようなメソッドは、Windows Communication Foundation (WCF) サービスの操作を呼び出して応答を待ちます。応答が送信され、このコントラクトの条件の下で要求に関連付けられる必要があります。メソッドが void を返した場合でも、インフラストラクチャは、空のメッセージを作成して送信することで、メソッドが返ったことを呼び出し元に示します。応答メッセージの作成とディスパッチをキャンセルする唯一の方法は、操作に対して一方向のコントラクトを使用することです。
操作コントラクトを指定する方法詳細については、 、OperationContractAttribute クラス (特に IsOneWay プロパティ) のトピックを参照してください。
双方向コントラクト用のクライアント アプリケーションを作成する方法詳細については、 、「方法 : 一方向コントラクトと要求/応答コントラクトを使用して WCF サービスにアクセスする」を参照してください。
要求/応答コントラクトを作成するには
サービスにより実装されるメソッドを定義するインターフェイスに ServiceContractAttribute クラスを適用することにより、サービス コントラクトを作成します。
OperationContractAttribute クラスをメソッドに適用する際に、クライアントが呼び出すことのできるインターフェイスのメソッドを指定します。
操作が応答メッセージを返すかどうかは、IsOneWay プロパティの値で示されます。操作が要求/応答コントラクトを持つ場合、このプロパティは false に設定されます。また、操作が一方向のコントラクトを持つ場合、このプロパティは true に設定されます。IsOneWay プロパティの既定値は false であるため、OperationContractAttribute クラスを持つすべての操作では、既定で要求/応答コントラクトが満たされます。したがって、この属性プロパティの値は明示的に false に指定しなくてもかまいません。
例
次のサンプルは、Add メソッドと Subtract メソッドを提供する電卓サービスのコントラクトを定義します。このコントラクトを使用すると、クライアントは Add メソッドおよび Subtract メソッドを呼び出し、それぞれ合計および差が返されるのを待ちます。Multiply メソッドは OperationContractAttribute クラスでマークされていないため、このコントラクトの一部ではありません。したがって、クライアントからはアクセスできません。
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)
}
- サービス コントラクト インターフェイスを ServiceContractAttribute クラスでマークし、そのメソッドを OperationContractAttribute クラスでマークすると、サービスが展開されたときに、Web サービス記述言語 (WSDL) で記述されたサービス コントラクトの定義、クライアントのコントラクト、およびコードが自動的に生成されます。
- 操作および操作の各入出力を指定する標準の WSDL ドキュメントとしてサービスが展開されると、外部から参照可能な WCF サービス コントラクトの定義にアクセスできます。WSDL を表示するには、サービスの HTTP ベースのアドレスに ?wsdl クエリを追加し、その結果として得られる URI (Uniform Resource Identifier) をブラウザで参照します。