Клиент .NET, подключающийся к IBM MQ через SSL - PullRequest
4 голосов
/ 18 апреля 2010

Я получил ключевые файлы от нашего клиента, где мне нужно использовать их для подключения к MQ через SSL. Файлы, которые мы получили от клиента:

xxx.crl 
xxx.kdb 
xxx.rdb 
xxx.sth 
xxx.tab 

Они сказали, что таблица каналов клиента в этом. Я пытаюсь подключиться, используя приведенный ниже код. И они говорят, что мне не нужно указывать диспетчер очереди, он будет определен в таблице каналов клиентов. Но одна вещь, которую они сделали при создании ключа с использованием «user1».

Код:

Hashtable connectionProperties = new Hashtable(); 

// Add the connection type 
connectionProperties.Add(MQC.TRANSPORT_PROPERTY, connectionType); 

MQQueueManager qMgr; 

MQEnvironment.SSLCipherSpec = "TRIPLE_DES_SHA_US"; 
MQEnvironment.SSLKeyRepository = @"D:\Cert\BB\key"; 
MQEnvironment.UserId = "user1"; 
MQEnvironment.properties.Add(MQC.TRANSPORT_PROPERTY, connectionType); 
qMgr = new MQQueueManager(); 

Ошибка, которую я получаю:

Сообщение = "MQRC_Q_MGR_NAME_ERROR"

Я также пытался подключиться к серверу, что я могу сделать.

Может ли кто-нибудь мне помочь, что я не так делаю и почему я получаю эту ошибку?

Ответы [ 3 ]

4 голосов
/ 10 мая 2010

Я решил проблему, установив следующие переменные env. до подключения.

Переменными Env являются MQCHLLIB, MQCHLTAB, MQSSLKEYR - используйте Environment.SetEnvironmentVariable - для установки значений

<add key="MQ_SSL_CERT_PATH" value="D:\Cert\<nameof KDB with out .kdb>" />   
<add key="MQ_CHANNEL_LIB" value="D:\Cert" />  --- Certs location. 
<add key="MQ_CHANNEL_TAB" value="xxx.tab" />
<add key="NMQ_MQ_LIB" value="mqic.dll" />  - **Make sure you give the refarance of this DLL**

После установки всего этого просто вызовите queueManager = new MQQueueManager (); - Тебе должно быть хорошо.

3 голосов
/ 23 апреля 2010

«MQRC_Q_MGR_NAME_ERROR» означает, что вы успешно подключаетесь к QMgr, но имя QMgr не совпадает с именем в запросе на подключение. Например, если мой запрос на соединение предназначен для QMGRA, а IP-адрес и порт, к которому я подключаюсь, для QMGRB, я ожидаю получить ошибку, которую вы видите. Если в моем запросе на соединение не указано имя QMgr, то любой QMgr, к которому я подключаюсь, должен принимать соединение. Поэтому кажется, что либо переменная окружения, либо файл CCDT, либо строка кода, не показанная в вашем вопросе, задают pior имени QMgr для попытки подключения. К сожалению, невозможно указать на одну из них как на причину без дополнительной информации.

Не беспокойтесь по поводу идентификатора user1, который вам дали. Если бы это была проблема, вы бы получили обратно 2035 MQRC_AUTHORIZATION_ERROR. Идентификатор даже не проверяется до тех пор, пока после не произойдет точка, в которой не удалось установить соединение.

Вот несколько ссылок, которые могут помочь вам разобраться во всем этом. Это ссылки на WMQ v7. Поскольку v6 является Конец срока службы по состоянию на сентябрь 2011 года, я надеюсь, что все новые разработки будут на v7. Кроме того, классы .NEt интегрированы в базовый продукт WMQ и полностью поддерживаются начиная с v7.

Примеры вызовов MQCONN http://bit.ly/9HG8tC

Подключение клиентских приложений WebSphere MQ к администраторам очередей http://bit.ly/9eapRO

Использование SSL с клиентом WMQ .Net http://bit.ly/9nXayP

0 голосов
/ 21 апреля 2010
  • Для начала нужно в настройках приложения ввести ключ "<add key="NMQ_MQ_LIB" value="mqic32.dll" />"

  • Поместите таблицу соединений в каталог.

  • Введите переменные среды: MQCHLLIB -> Путь к каталогу таблицы и MQCHLTAB->Name файла таблицы

  • В коде C # используйте конструктор MQQueueManager: "MQQueueManager oQueueMng = new MQQueueManager();". этот конструктор находит в CCDT сервер, канал и т. д.

  • В коде C #, когда вам нужно открыть очередь для размещения сообщений, открыть очередь с параметром MQOO_BIND_NOT_FIXED, я открываю с параметрами MQC.MQOO_OUTPUT + MQC.MQOO_BIND_NOT_FIXED + MQC.MQOO_FAIL_IF_QUIESCING. oQueueMng.AccessQueue("name of the queue", "open options");

...