方法 : WCF サービス操作を非同期に呼び出す
ここでは、クライアントからサービス操作に非同期にアクセスする方法について説明します。このトピックのサービスは、ICalculator
インターフェイスを実装しています。クライアントは、イベント ドリブンの非同期呼び出しモデルを使用して、このインターフェイスで操作を非同期に呼び出すことができます (イベント ベースの非同期呼び出しモデルの詳細については、「Multithreaded Programming with the Event-based Asynchronous Pattern」を参照してください)。サービス操作を非同期に実装する方法を示す例については、「方法 : 非同期サービス操作を実装する」を参照してください。同期操作と非同期操作の詳細については、「同期操作と非同期操作」を参照してください。
メモ : |
---|
ChannelFactory を使用している場合、イベント ドリブンの非同期呼び出しモデルはサポートされません。ChannelFactory を使用して非同期呼び出しを作成する方法については、「方法 : チャネル ファクトリを使用して、非同期的に操作を呼び出す」を参照してください。 |
手順
WCF サービス操作を非同期に呼び出すには
次のコマンドに示すように、/async と /tcv:Version35 の両方のコマンド オプションを指定して ServiceModel Metadata Utility Tool (Svcutil.exe) を実行します。
svcutil /n:http://Microsoft.ServiceModel.Samples,Microsoft.ServiceModel.Samples https://localhost:8000/servicemodelsamples/service/mex /a /tcv:Version35
これにより、同期操作と標準のデリゲート ベースの非同期操作だけでなく、以下を含む WCF クライアント クラスも生成されます。
- イベント ベースの非同期呼び出し方法で使用するための 2 つの <operationName>Async 操作。次に例を示します。
- イベント ベースの非同期呼び出し方法で使用するための <operationName>Completed 形式の操作完了イベント。次に例を示します。
- イベント ベースの非同期呼び出し方法で使用するための (<operationName>CompletedEventArgs 形式の) 各操作の System.EventArgs 型。次に例を示します。
次のサンプル コードに示すように、呼び出し元アプリケーションで、非同期操作の完了時に呼び出されるコールバック メソッドを作成します。
操作を呼び出す前に、<operationName>EventArgs 型の新しいジェネリック System.EventHandler を使用して、(前の手順で作成した) ハンドラ メソッドを <operationName>Completed イベントに追加します。次に、<operationName>Async メソッドを呼び出します。次に例を示します。
例
メモ : |
---|
イベント ベースの非同期モデルのデザイン ガイドラインには、複数の値を返す場合に、1 つの値を Result プロパティとして返し、残りの値を EventArgs オブジェクトのプロパティとして返すことが記載されています。この 1 つの結果として、クライアントがイベント ベースの非同期コマンド オプションを使用してメタデータをインポートし、操作から複数の値が返される場合、既定の EventArgs オブジェクトが 1 つの値を Result プロパティとして返し、残りの値は EventArgs オブジェクトのプロパティになります。メッセージ オブジェクトを Result プロパティとして受け取り、返された値をそのオブジェクトのプロパティとして取得する場合は、/messageContract コマンド オプションを使用します。これにより、EventArgs オブジェクトの Result プロパティとして応答メッセージを返すシグネチャが生成されます。すべての内部戻り値は、応答メッセージ オブジェクトのプロパティになります。 |