c++ - 连接到队列管理器 C++ 时出现 MQ 错误 2058
问题描述
目前我正在尝试在 Linux 机器中使用 C++ 和 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 CONNECTION\n" );
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 = &connectionDescriptor;
MQCONNX(" ", &connectionOptions, &sourceConnectionHandle, &completionCode, &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(" ", &sourceConnectionHandle, &completionCode, &reasonCode);
知道为什么使用 MQCONNX 返回 2058 原因代码吗?
在此先感谢您的帮助。
解决方案
MQCD 已添加到 MQCNO 结构的版本 2。您需要设置connectionOptions.Version = MQCNO_VERSION_2
(或更高,如果您想使用 CNO 的其他字段)
推荐阅读
- matlab - 将结果存储在矩阵中
- powershell - 加载程序集并按计划任务运行不兼容?
- ios - 如何在 ios swift 中使用 Codable 创建模型类并访问 JSON 响应中的值?
- redis - 64 位 Redis 中的 Lua 不正确的转换字符串与大数字
- kubernetes - AdmissionController 阻止 Terminated Pod 被完全移除
- java - Java ZipInputStream 抛出 zip.ZipException:在解析嵌套的 zip 文件时无效距离太远
- amazon-web-services - AWS Lambda 列表函数在过去 x 分钟内出错
- c# - 如何在使用 .com 部署在 IIS 中的 .Net Framework 4.7 项目中显示 swagger/ui/index 页面
- bash - 随机读取文件的行并记录它们
- python - 每次值更改时如何拆分列表?