IBMWebsphereMQを介して通信するカスタムWCFチャネルを開発しました。
チャネルファクトリを作成しました。
public class MqChannelFactory : ChannelFactoryBase<IRequestChannel>
これは、チャネルのインスタンスを返します。
public class MqRequestChannel : ChannelBase, IRequestChannel
IBM MQキュー・マネージャーへの接続は、コストのかかる操作です。現在、これはChannel.OnOpen()で行います。
チャネルを正しく使用するためのガイドラインに従って、チャネルが必要になるたびにChannelFactory.CreateChannel()を呼び出し、メッセージを送信してからChannel.Close()を呼び出します。
ChannelFactoryがチャネルのプーリングを実行したため、Channel.Close()が呼び出されたときに、チャネルは実際には閉じられず、プールに戻されたと想定しました。ただし、ChannelFactory.CreateChannelを呼び出すたびに、新しいチャネルがインスタンス化され、要求が送信されると、高価なチャネルのオープンが実行されます。
それで、質問:すべての要求でチャネルが開かれるのを防ぐための最良のアプローチは何ですか?
私たちが調査しているオプションのいくつか:
とにかく、チャネルプーリングを実行するように指定する構成はありますか?ChannelFactoryに独自のチャネルプーリングを実装する必要がありますか?
アプリケーションの存続期間中、チャネルを開いたままにして、すべてのリクエストをアプリケーション経由で送信する必要がありますか?
アプリケーションの存続期間中キャッシュするチャネルファクトリで、コストのかかる操作(キューマネージャへの接続)を実行する必要がありますか?