次の方法で共有


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

ここでは、双方向コントラクトを使用するメソッドを作成するための基本手順を示します。双方向コントラクトでは、クライアントとサーバーが互いに独立して通信できるため、どちらからでも相手の呼び出しを開始できます。双方向コントラクトは、Windows Communication Foundation (WCF) サービスに使用できる 3 つのメッセージ パターンのうちの 1 つです。他の 2 つのメッセージ パターンは、一方向および要求/応答です。双方向コントラクトは、クライアントとサーバー間の 2 つの一方向コントラクトで構成され、メソッドの呼び出しが相互に関連付けられている必要はありません。サービスでクライアントに詳細を照会したり、クライアントで明示的にイベントを発生させたりする必要がある場合は、この種のコントラクトを使用します。双方向コントラクトのクライアント アプリケーションの作成詳細については、 、「方法 : 双方向コントラクトを使用してサービスにアクセスする」を参照してください。実際に動作するサンプルについては、「Service Contract: Duplex」を参照してください。

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

  1. 双方向コントラクトのサーバー側を構成するインターフェイスを作成します。

  2. インターフェイスに ServiceContractAttribute クラスを適用します。

  3. インターフェイスでメソッド署名を宣言します。

  4. パブリック コントラクトの一部であることが必要な各メソッド シグネチャに、OperationContractAttribute クラスを適用します。

  5. クライアントでサービスが呼び出すことができる一連の操作を定義するコールバック インターフェイスを作成します。

  6. コールバック インターフェイスでメソッド署名を宣言します。

  7. パブリック コントラクトの一部であることが必要な各メソッド シグネチャに、OperationContractAttribute クラスを適用します。

  8. プライマリ インターフェイスの CallbackContract プロパティをコールバック インターフェイスの型に設定することにより、2 つのインターフェイスを双方向コントラクトにリンクします。

クライアントでメソッドを呼び出すには

  1. サービスのプライマリ コントラクトの実装で、コールバック インターフェイスの変数を宣言します。

  2. OperationContext クラスの GetCallbackChannel メソッドから返されるオブジェクト参照に変数を設定します。

  3. コールバック インターフェイスで定義されたメソッドを呼び出します。

次のコード例は、双方向通信を示しています。サービスのコントラクトには、順方向および逆方向に移動するためのサービス操作が含まれます。クライアントのコントラクトには、位置を報告するためのサービス操作が含まれます。

  • ServiceContractAttribute 属性と OperationContractAttribute 属性を適用すると、サービス コントラクトの定義を Web サービス記述言語 (WSDL) で自動的に生成できます。
  • ServiceModel Metadata Utility Tool (Svcutil.exe) を使用して、クライアントの WSDL ドキュメントと (オプションの) コードおよび構成を取得します。
  • 双方向サービスを公開しているエンドポイントは、セキュリティで保護されている必要があります。サービスが双方向メッセージを受信すると、その受信メッセージの ReplyTo を参照して応答の送信先を決定します。チャネルがセキュリティで保護されていない場合、信頼関係のないクライアントが対象コンピュータの ReplyTo を使用して悪意のあるメッセージを送信し、その対象コンピュータのサービス拒否 (DOS: Denial Of Service) を引き起こす可能性があります。通常の要求/応答メッセージでは、ReplyTo は無視され、元のメッセージを受信したチャネルで応答が送信されます。したがって、この問題は発生しません。

関連項目

タスク

方法 : 双方向コントラクトを使用してサービスにアクセスする
方法 : Windows Communication Foundation サービス コントラクトを定義する

リファレンス

ServiceContractAttribute
OperationContractAttribute

概念

サービスの設計と実装

その他の技術情報

Service Contract: Duplex
Service Contract: Session