メッセージ セキュリティを使用している場合の WCF クライアント チャネルの有効期間に関して質問がありますが、まず、会社のセットアップとガイドラインに関するいくつかの注意事項を以下に示します。
- 当社のクライアント/サーバー アプリケーションは、イントラネットでの使用のみを目的としています
- 私たちのクライアントはWPFアプリケーションです
- WCF の使用に関する当社のガイドラインは次のとおりです。
- wsHttpBinding を使用する
- メッセージ セキュリティを使用する
- サービス インスタンス モード: PerCall
- Service ConcurrencyMode: 複数
イントラネットのセットアップでメッセージ セキュリティを使用する必要があるのは初めてです。クライアントとサーバーに保持されるリソースの量を制限し、文字通り単に物事を単純にするために、クライアントチャネルを通常どのように使用するかを次に示します。
- インスタンス化 + チャネルを開く (ChannelFactory を使用)
- WCF 呼び出しを行う
- チャネルをできるだけ早く閉じる/破棄する
Fiddler 2 でこの戦略を監視しているときに、Message Security が原因で、単一の WCF 呼び出しがサービスへの 5 つのラウンドトリップを引き起こしていることに気付きました。
- ハンドシェークのための 3 回の初期往復
- 実際の WCF 呼び出しの 1 回の往復
- セッションを閉じるための 1 回の呼び出し (PerCall を使用しているため、これは IIS レベルでのセキュリティ セッションであると想定しています)
Message Security をオフにすると、当然のことながら、1 つの WCF が... 1 回の往復になります。
今のところ、Message Security を使用する必要があります。それが私たちのガイドラインだからです。これを念頭に置いて、各クライアント WPF アプリからの数百の WCF 呼び出しをセッションにすることを知っているので、毎回破棄するのではなく、クライアント チャネルを開き、再利用のために開いたままにしておくことをお勧めしますか?