2017-01-18 1 views
1

У меня есть клиент MQ, который работает успешно, и сообщения доступны с его помощью.Я занят написанием приложения C# IBM MQ Client и продолжаю получать «Исключение: инициализатор типа для« IBM.WMQ.Nmqi.UnmanagedNmqiMQ »сделал исключение».

Мы установили необходимые переменные окружения: MQCHLLIB и MQCHLTAB и MQSSLKEYR.

Файл .TAB находится в правой папке. Однако, когда я выполнить следующий код:

private static bool ConnectMq() 
    { 
     try 
     { 
      queueManager = new MQQueueManager("ECG_MBTST_QM", Init(false)); 
      queueManager.Connect(); 
      if (queueManager.IsConnected) 
      { 
       Console.WriteLine("Connected..."); 
      } 
      return true; 
     } 
     catch (MQException exp) 
     { 
      Console.WriteLine("Exception Message: " + exp.Message); 
     } 
     catch (Exception exp) 
     { 
      Console.WriteLine("Exception: " + exp.Message); 
     } 
     return false; 
    } 
    private static Hashtable Init() 
    { 
     Hashtable properties; 
     properties = new Hashtable 
      { 
       {MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_MQSERIES_CLIENT} 
      }; 

     return properties; 
    } 

Я получаю сообщение об ошибке, как описано. У меня нет выбора, кроме как использовать файл CCDT, как это указал хост сервера. Я считаю, что сервер v7, и я ссылаюсь на библиотеки WM8 v8. В теории это должно сработать.

Я попытался с помощью стандартного набора свойств, а также (значения были изменены в целях безопасности):

properties = new Hashtable 
      { 
       {MQC.TRANSPORT_PROPERTY, "TCP"}, 
       {MQC.CHANNEL_PROPERTY, "Channel"}, 
       {MQC.CONNECTION_NAME_PROPERTY, "IBM_MQ_Conn"}, 
       {MQC.PORT_PROPERTY, "1414"}, 
       {MQC.HOST_NAME_PROPERTY, "IP Address"}, 
       {MQC.SSL_CIPHER_SPEC_PROPERTY, "TLS_RSA_WITH_AES_128_CBC_SHA"} 
      }; 

Но когда я использовать вышеуказанные свойства я получаю ошибку 2538 - хост не доступно. Есть ли что-то, что мне не хватает в отношении того, как использовать файл CCDT и C# вместе?

Заранее спасибо.

редактировать - в соответствии с просьбой JoshMC

Это последняя запись из файла AMQERR01.LOG:

1/18/2017 1:51:05 AM - Process(3272.1) User(andrewhuntley) Program(MQ app.exe) 
AMQ9202: Remote host '192.168.150.102' not available, retry later. 

EXPLANATION: 
The attempt to allocate a conversation using TCP/IP to host '192.168.150.102' 
for channel (Exception) was not successful. However the error may be a 
transitory one and it may be possible to successfully allocate a TCP/IP 
conversation later. 

In some cases the remote host cannot be determined and so is shown as '????'. 
ACTION: 
Try the connection again later. If the failure persists, record the error 
values and contact your systems administrator. The return code from TCP/IP is 0 
(X'0'). The reason for the failure may be that this host cannot reach the 
destination host. It may also be possible that the listening program at host 
'192.168.150.102' was not running. If this is the case, perform the relevant 
operations to start the TCP/IP listening program, and try again. 
----- MQTCPConnection.cs : 357 ------------------------------------------------ 

Пожалуйста, обратите внимание, что сервер запущен и доступен, как я могу подключиться к нему используя установленный клиент IBM.

+0

Смотрите, если у вас есть какая-либо ошибка в 'errors' директории под IBM MQ v8 каталога установки, если поэтому какая ошибка вы видите, что соответствует времени ошибки, получаемой вашим клиентом с помощью CCDT.Пожалуйста, обновите вопрос с этими подробностями. – JoshMc

+0

В каталоге ошибок нет ошибок, так как Клиент, которого я пишу, является автономным. Установленный v7.5 клиент MQ работает на 100% штрафа, как указано. Однако я отредактировал вопрос по вашему запросу, предоставив журнал из файла ошибки в моем местоположении клиента. – Vaelen

+0

Какой конкретный автономный клиент MQ v8 вы установили (например: 8.0.0.4)? – JoshMc

ответ

1

NuGet Managed IBM WebSphere MQ Client for .NET использует библиотеки MQ IBM MQ 8.0.0.5 MQ.

Я нашел этот APAR IT14222 от IBM, который, похоже, подходит для получения точного сообщения об ошибке.

Это должно быть исправлено в следующем исправлении 8.0.0.6, которое должно быть выпущено до конца марта 2017 года. Если у вас есть контракт на поддержку IBM, вы также можете открыть PMR и попросить предоставить вам копию уязвимая dll, у которой есть исправление для этого APAR, включенное против 8.0.0.5.

+0

Да, я нашел ту же информацию. Я все равно отметлю это как ответ. Спасибо за исследование. – Vaelen

+0

@Vaelen Это исправление может присутствовать уже в версии 9 .0.0.0 LTS и v9.0.1.0 версии CD распространяемого клиента. Это основано на описании APAR, не упоминающем v9, а список исправлений для компакт-дисков 9.0.1.0, который был выпущен после 9.0.0.0, также не отображает этот APAR , – JoshMc

1

Пила этот вопрос поздно.

Клиент MQ .NET, доступный по адресу NuGet, не принадлежит IBM. В нем четко упоминается «Неофициальный».

Его можно использовать только в режиме управляемого .NET, а не в привязках или режиме .NET Un-managed client, так как он не имеет других зависимых библиотек.

Исключение составляет IBM.WMQ.Nmqi.UnmanagedNmqiMQ, поскольку библиотеки клиентов MQ C отсутствуют. Вы можете использовать MQC.TRANSPORT_MQSERIES_MANAGED значение для MQC.TRANSPORT_PROPERTY разрешить исключение или «установить» Клиент MQ распространяемого если вы хотите использовать MQC.TRANSPORT_MQSERIES_CLIENT вариант

Смежные вопросы