#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)