質問

を開発したカスタムWCFチャンネル伝送IBM Websphere MQ.

またチャンネル工場

public class MqChannelFactory : ChannelFactoryBase<IRequestChannel>

るインスタンスが返さのチャンネル:

public class MqRequestChannel : ChannelBase, IRequestChannel

に接続するIBM MQキュー長は高価なものとなる。現在、このチャンネルとしOnOpen().

下記のガイドラインのために正しくご使用いただくためのチャンネルをcallign ChannelFactory.CreateChannel()各時間を要するチャネルメッセージの送信、呼び出します。Close().

想定した、ChannelFactory行プールのチャンネルする場合には、このようなチャンネルClose()が呼び出されると、チャネルは実は閉じたものプールがあります。でも、詰まChannelFactory.CreateChannel、新しいチャンネルはインスタンスを生成時には送信されたリクエストであること、高価なチャンネル開業を行います。

その質問:何が最善のアプローチを防ぐチャネルをオープン毎すか?

一部のオプションを検討:

  • 直しとかは出来ないんですかを設定するかどうかを指定しますチャンネルをプールすべきでしょうか?が認められているための実施に当社独自のチャンネルプールにChannelFactory?

  • ていくべきだしチャネルの生活アプリケーションの送信すべての要求を通してですか?

  • すべてのコストの高い動作に接続のキュー長のチャンネル工場としてのキャッシュの生活になりますか。

役に立ちましたか?

解決

最良の選択肢が何であるかに関しては何のハードと高速のルールは本当にありません。当初、私はおそらく最も簡単な解決策は、アプリケーションレベルでクライアントチャンネルをキャッシュするだろうと思います。あなたの実装に応じて、それはところで、いくつかの同期作業が必要になることがあります。

あなたはのChannelFactoryレベルで潜在的にプール接続できました。私は、全体のチャネルを(いくつかの複雑さが常にあります)プールに躊躇だろうが、あなたは内部の接続をプールし、そのチャネルファクトリで開催されたプールから必要なときにチャネルが接続を獲得する可能性があります。

これは、ClientBase <のhref = "http://blogs.msdn.com/wenlong/archive/2007/10/27/performance-improvement-of-wcf-client-proxy-creation-and利点を持っています(あなたがそれを使用している場合)、それはアプリケーションコードにそれが簡単になるかもしれないので-Best-practices.aspx」のrel = 『nofollowをnoreferrerは』>すでに、.NET 3.0 SP1のようのClientFactoryのインスタンスをキャッシュします。

欠点は、しかし、これはのエンドポイントアドレスは、あなたが潜在的に異なるエンドポイントのチャネルを作成することができますので、キュー・マネージャへの接続をオープンするために必要な情報を持っている場合は、を実装するために難しくなるかもしれないということということです単一のChannelFactoryオブジェクトからアドレス。おそらくこれは、あなたがこれを明示的に禁止する必要がありますことを、またはあなたのChannelFactoryの実装は、内部(エンドポイントアドレスまたはそのような何かに1つずつ)複数の接続プールを維持する必要があるかもしれないことを意味します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top