クライアント アプリケーションがサービスと通信するには、クライアント アプリケーションで WCF クライアントまたはチャネルを作成および構成し、使用する必要があります。「WCF クライアントの概要」では、オブジェクトの概要および基本的なクライアントやチャネル オブジェクトの作成と使用に関する手順を説明しています。
このトピックでは、ユーザーのシナリオに応じて役立つ、クライアント アプリケーション、クライアント オブジェクト、およびチャネル オブジェクトに関するいくつかの問題について詳しく説明します。
ここでは、以下の項目に関連する動作と問題について説明します。
-
チャネルとセッションの有効期間
-
例外処理
-
ブロックの問題について
-
対話方式によるチャネルの初期化
チャネルとセッションの有効期間
Windows Communication Foundation (WCF) アプリケーションのチャネルは、データグラム チャネルとセッションフル チャネルの 2 つに分類されます。
データグラム チャネルは、含まれているすべてのメッセージとの相関関係のないチャネルです。データグラム チャネルでは、入出力操作が失敗しても、通常、次の操作は影響を受けないので、同じチャネルの再利用が可能です。したがって、通常、データグラム チャネルは失敗になりません。
一方、セッションフル チャネルは、他のエンドポイントと関連付けられたチャネルです。一方のセッション内のメッセージは、他方の同じセッションと常に関連付けられています。さらに、セッションが成功したとみなされるためには、セッションの両参加要素が、メッセージ交換要件が満たされたということに同意する必要があります。両参加要素が同意できない場合、セッション チャネルは失敗になる場合があります。
クライアントを明示的に開く場合も暗黙的に開く場合も、最初の操作を呼び出します。
アプリケーション層にチャネルを公開するほとんどのシステム提供のバインディングでは、既定でセッションが使用されますが、System.ServiceModel.BasicHttpBinding では使用されません。詳細な情報については、次のページを参照してください。 「セッションの使用」を参照してください。
セッションの適切な使用
例外処理
クライアントのブロックとパフォーマンス
アプリケーションが要求/応答操作を同期的に呼び出す場合、戻り値が受信されるか例外 (System.TimeoutException など) がスローされるまで、クライアントはブロックされます。この動作はローカルの動作と似ています。アプリケーションが WCF クライアント オブジェクトまたはチャネルに対する操作を同期的に呼び出す場合、チャネル レイヤがデータをネットワークに書き込むことができるまで、または例外がスローされるまで、クライアントに制御は戻りません。また、一方向メッセージ交換パターン (System.ServiceModel.OperationContractAttribute.IsOneWay が true に設定された操作をマークすることで指定される) では、クライアントの応答性が向上する可能性がありますが、バインディングや送信済みのメッセージによっては、一方向操作でもブロックが生じる場合があります。一方向操作とはメッセージ交換のみを指しています。詳細な情報については、次のページを参照してください。 「一方向サービス」を参照してください。
メッセージ交換パターンに関係なく、大規模データのチャンクによりクライアント処理が遅延する場合があります。この問題の処理方法を理解するには、「大規模データとストリーミング」を参照してください。
操作が完了してもアプリケーションでさらに処理を行う必要がある場合、WCF クライアントが実装するサービス コントラクト インターフェイスに非同期のメソッドのペアを作成する必要があります。これを行うには、ServiceModel Metadata Utility Tool (Svcutil.exe) で /async スイッチを使用するのが最も簡単な方法です。例については、「方法 : WCF サービス操作を非同期に呼び出す」を参照してください。
クライアントのパフォーマンス向上詳細については、 、「中間層クライアント アプリケーション」を参照してください。
ユーザーによる資格情報の動的選択の有効化