【发布时间】:2018-02-23 07:40:43
【问题描述】:
基本上,我的工作任务涉及使用 IBM MQ 和 C#,虽然我精通 C#,但在网络编程和 IBM MQ 方面我完全是新手(因为我几乎没有开始使用 IBM MQ 昨天)。
无论如何,在阅读了很多指南和示例,并解决了很多问题后,我设法制作了一个连接到 QueueManager 并成功发送和读取消息的 C# 解决方案。但是,我只能通过禁用默认授权来做到这一点,虽然当我需要做的只是测试我的适配器类时这很好,但我现在需要能够指定用户 ID 和密码,并最终恢复所有我禁用的授权设置。
但问题是,每当我尝试将 USER_ID_PROPERTY 属性添加到 connectionProperties Hashtable 时,QMQueueManager 构造函数都会返回 Null 引用系统异常。
这是我构建哈希表的代码;
Hashtable connectionProperties = new Hashtable();
// Add the connection type
connectionProperties.Add(MQC.TRANSPORT_PROPERTY, connectionType);
// Set up the rest of the connection properties, based on the connection type requested
switch (connectionType) {
case MQC.TRANSPORT_MQSERIES_BINDINGS: break;
case MQC.TRANSPORT_MQSERIES_CLIENT:
case MQC.TRANSPORT_MQSERIES_XACLIENT:
case MQC.TRANSPORT_MQSERIES_MANAGED:
//connectionProperties.Add(MQC.USER_ID_PROPERTY, "newUser");
connectionProperties.Add(MQC.HOST_NAME_PROPERTY, hostName);
connectionProperties.Add(MQC.PORT_PROPERTY, 1421);
connectionProperties.Add(MQC.CHANNEL_PROPERTY, channel);
connectionProperties.Add(MQC.CONNECTION_NAME_PROPERTY, connectionName);
break;
default:
Console.WriteLine(connectionType + " is not a valid connection type");
break;
}
return connectionProperties;
如果我按原样运行代码,一切正常,我可以毫无问题地连接到队列、发送、读取和断开连接,当我取消注释使用 ID 行时,我得到一个空参考系统异常以下行;
qmQueueManager = new MQQueueManager(qManager, connectionProperties);
这是弹出的异常信息:
发生系统错误:System.NullReferenceException:对象引用未设置为对象实例。 在 IBM.WMQ.MQQueueManager.Connect(字符串 queueManagerName) 在 IBM.WMQ.MQQueueManager..ctor(字符串 queueManagerName、Hashtable 属性) 在 MQNetworkClient.MQManager.ConnectMQ(字符串详细信息)位置 C:\Users\A440\Documents\Visual Studio 2017\Projects\MQNetworkClient\MQNetworkClient\MQManager.cs:第 124 行 在 MQNetworkClient.MQManager.TryMQAction (MQSanityCheck sanityCheck, MQActionHandler mqAction, String details, String sanityFailMessage) 位置 C:\Users\A440\Documents\Visual Studio 2017\Projects\MQNetworkClient\MQNetworkClient\MQManager.cs:第 95 行
错误消息并没有给我太多继续,当我检查了 QueueManager 的 AMQError 日志但没有写在那里。
我非常感谢任何解决方案、解决方法或任何帮助追踪问题,基本上,我很感激能得到任何可能为我指明正确方向的建议。
如果它在某种程度上相关,我使用 IBM MQ v9 和 Visual Studio 2017。
谢谢。
【问题讨论】:
-
谢谢!我不敢相信它就是这么简单,添加密码属性解决了这个问题。再次感谢您。
-
请接受 JasonE 的回答,因为这似乎是一个产品缺陷,将在未来的补丁包中修复,同时 Hans Passant 建议的解决方法将允许它现在工作。要接受,只需单击向下箭头下方答案左侧的灰色复选标记。
标签: c# authentication ibm-mq