0

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に独自のチャネルプーリングを実装する必要がありますか?

  • アプリケーションの存続期間中、チャネルを開いたままにして、すべてのリクエストをアプリケーション経由で送信する必要がありますか?

  • アプリケーションの存続期間中キャッシュするチャネルファクトリで、コストのかかる操作(キューマネージャへの接続)を実行する必要がありますか?

4

1 に答える 1