Мы разработали пользовательский канал WCF, который обменивается данными через IBM Websphere MQ.
Мы создали фабрику каналов:
public class MqChannelFactory : ChannelFactoryBase<IRequestChannel>
, которая возвращает экземпляры нашего канала:
public class MqRequestChannel : ChannelBase, IRequestChannel
Подключение к администратору очередей IBM MQ - дорогостоящая операция.В настоящее время мы делаем это в Channel.OnOpen ().
Следуя указаниям по правильному использованию каналов, мы называем ChannelFactory.CreateChannel () каждый раз, когда нам требуется канал, отправляя сообщение, затем вызывая Channel.Close ().
Наше предположениеБыло так, что ChannelFactory выполнила пул каналов, так что когда вызывался Channel.Close (), канал фактически не был закрыт, а скорее возвращен в пул.Но каждый раз, когда мы вызываем ChannelFactory.CreateChannel, создается новый канал, и когда отправляется запрос, выполняется открытие дорогостоящего канала.
Итак, вопрос: как лучше всего предотвратить канал?открывается по каждому запросу?
Некоторые из рассматриваемых нами вариантов:
Есть ли в конфигурации возможность указать, что пул каналов должен иметь место?Должны ли мы реализовывать свой собственный пул каналов в нашей ChannelFactory?
Должны ли мы просто поддерживать наш канал открытым для жизни приложения, отправляя все запросы через него?
Должны ли мы выполнять дорогостоящую операцию (подключение к администратору очередей) на фабрике каналов, которую мы кэшируем на весь срок службы приложения?