Ошибка 2058 MQ при подключении к диспетчеру очередей C

#c #ibm-mq

#c #ibm-mq

Вопрос:

В настоящее время я пытаюсь подключиться к диспетчеру очередей с использованием C на компьютере Linux и функции MQCONNX, используя структуру MQCD для настройки сервера, канала, типа транспорта и т.д. После компиляции и запуска я получаю код причины 2058 (ошибка имени диспетчера очередей).

Я использую следующий код:

 extern "C" {
#include <cmqc.h>
#include <cmqxc.h>
}
#include <stdio.h>
#include <iostream>
#include <string.h>
#include <stdlib.h>

using namespace std;

int main ( int argc, char * * argv ) {
    printf( "TESTING QUEUE MANAGER CONNECTIONn" );
    
    MQHCONN sourceConnectionHandle;    
    MQLONG completionCode = 0;
    MQLONG reasonCode = 0;
    MQCD connectionDescriptor = {MQCD_CLIENT_CONN_DEFAULT};
    connectionDescriptor.TransportType = MQXPT_TCP;
    strcpy(connectionDescriptor.ChannelName, "DEV.APP.SVRCONN");
    strcpy(connectionDescriptor.ConnectionName,"mqprimary(1414)");
    
    MQCNO connectionOptions = {MQCNO_DEFAULT};  
    connectionOptions.ClientConnPtr = amp;connectionDescriptor;
    
    MQCONNX(" ", amp;connectionOptions, amp;sourceConnectionHandle, amp;completionCode, amp;reasonCode);
    
    if(MQCC_OK != completionCode)
    {            
        printf("MQCONNX ended with reason code %d connecting to source queue manager.n", reasonCode);
    }
    else
    {       
        printf ("Connected to Source Queue Manager.n");
    }
}
  

Я попытался подключиться к диспетчеру очередей с помощью setenv и MQCONN, как показано ниже, без использования структуры MQCD, и это сработало нормально, но мне нужно сделать это с помощью MQCONNX и MQCD:

 setenv("MQSERVER","DEV.APP.SVRCONN/TCP/mqprimary(1414)",1);
MQCONN(" ", amp;sourceConnectionHandle, amp;completionCode, amp;reasonCode);
  

Есть идеи, почему с помощью MQCONNX возвращается код причины 2058?

Заранее спасибо за вашу помощь.

Ответ №1:

MQCD был добавлен в версию 2 структуры MQCNO. Вам необходимо установить connectionOptions.Version = MQCNO_VERSION_2 (или выше, если вы хотите использовать дополнительные поля CNO)