Я уже некоторое время хожу кругами по этому поводу. Я пытаюсь подключиться к распределенному диспетчеру очередей, используя предоставленный файл таблицы каналов. Я могу заставить это работать, если укажу переменные среды MQCHLLIB и MQCHLTAB на своем сервере. Однако в документации IBM указано, что файл конфигурации .net может переопределить эти переменные.
Вот что я поместил в свой файл web.config:
...
<configSections>
<section name="CHANNELS" type="System.Configuration.NameValueSectionHandler" />
</configSections>
<CHANNELS>
<add key="ChannelDefinitionDirectory" value="C:\temp"></add>
<add key="ChannelDefinitionFile" value="DSM_MOM_TEST.tab"></add>
</CHANNELS>
...
И вот код, который выполняется:
Hashtable properties = new Hashtable();
//Add managed connection type to parameters.
const String connectionType = MQC.TRANSPORT_MQSERIES_CLIENT;
properties.Add(MQC.TRANSPORT_PROPERTY, connectionType);
return new MQQueueManager(queueManagerName, properties);
Для queueManagerName задан универсальный администратор очередей "*Q101T".
Однако это не работает, и я получаю сообщение об ошибке: 2058 MQRC_Q_MGR_NAME_ERROR.
Мне не удалось найти больше документации о том, как заставить это работать, кроме переменных среды, и стандартный mqclient.ini должен быть переопределен разделом каналов в web.config.
Есть ли что-то, что я пропустил в коде? Мы будем очень благодарны за любые советы.
Изменить: я изменил connectionType на MQC.TRANSPORT_MQSERIES_MANAGED, и я избавился от возникающей ошибки. Однако теперь я получаю сообщение об ошибке ввода-вывода:
Исключение System.IO.IOException не было обработано кодом пользователя. Сообщение = "Произошла ошибка ввода-вывода". Source="amqmdnet"
StackTrace: в IBM.WMQ.MQChannelTable.CreateChannelEntryLists(MQChannelListEntry nameList)
Я думаю, что это, скорее всего, связано с https://www-304.ibm.com/support/docview.wss?uid=swg1IC69174, так что теперь я жду, пока ребята из промежуточного программного обеспечения подтвердят, так ли это, и, надеюсь, предоставят мне новый файл .TAB...
Edit2 Похоже, проблема не в этом. Я запустил трассировку MQ, и она выдает ошибку, потому что не может найти файл AMQCLCHL.TAB. Я не понимаю, почему он все еще ищет этот файл. Он должен использовать таблицу каналов, указанную в моем файле web.config. Кто-нибудь знает, почему он не принимает эти значения?