2011-09-02 23 views
10

同じWCFチャネルを何度も再利用するアプリケーションがあります。私はファクトリオブジェクトを介して静的参照を保持します。私はこれがうまくいっているのか、xチャンネルを開き、すべてのサービスが単一のチャンネルではなく、これらのチャンネルで呼び出されるべきなのだろうか?単一のWCFチャネルのパフォーマンスと複数のチャネル

xチャネルを使用する場合、これらのサービス呼び出しは1つのチャネルのみを使用する場合はキューに入れられますか?

答えて

11

すべてのリクエストに単一のチャンネルファクトリを使用する必要がありますが、リクエストごとに異なるチャンネルを作成する必要があります。チャンネルを再利用しないでください。それらは作成するのに高価ではなく、スレッドセーフではありません。作成するのに高価なものは、チャネルファクトリです。スレッドセーフであり、再利用することができます。もちろん、チャネルファクトリがフォールト状態になった場合は、再度開く必要があります。

+1

したがって、_channelFactory.CreateChannel()によって返されたICommunicationObjectを保持することはお勧めできません。私は今、すべての要求に対して1つのチャンネルを開いたままにしています。私は_channelFactory.CreateChannel()を呼び出しごとにしません。初めて作成した静的なものを再利用します。 –

+1

@Bjorn Bailleul、全くいいことではない。 '_channelFactory.CreateChannel()'によって返されたインスタンスは、できるだけ短く存続し、決して再利用されません。私が言ったように、 'CreateChannel'呼び出しは高価ではありません。それは非常に速いです。リクエストごとに呼び出すことができます。高価なものは、チャネルファクトリの作成です。これはキャッシュできるものです。 –

+1

@ダリン - 「各コールに異なるチャネルを使用する」という参照やリンクがありますか?このブログはチャンネルファクトリで最も参考になる記事の1つであり、その最初のベストプラクティスは「同じプロキシの再利用」です: http://blogs.msdn.com/b/wenlong/archive/2007/10/27/performance @imported-of-wcf-client-proxy-creation-and-best-practices-examples.aspx – ErnieL

6

@Darinディミトロフ

多くの場合、同じプロキシ を再利用するには、同じプロキシを再利用したいと思います。これは最高のパフォーマンスを発揮します。最初のセキュリティネゴシエーションが高コストになる可能性があるため、セキュリティ機能を使用する場合は特に当てはまります。

プロキシはチャネルと同じです。あなたがセッションで動作するように計画している場合は、新しいチャネルを作成することによって、(要求ごとに新しいセッションを確立する必要はありません。さらに、

ISimpleContract proxy = factory.CreateChannel(); 
((IClientChannel)proxy).Open(); 

:あなたはthis blog postを見れば、あなたは次のコードスニペットを見ることができます/毎回プロキシ)。

関連する問題