基本上,我在工作中遇到了一个涉及使用IBM MQ和C#的任务,虽然我很擅长使用C#,但在网络编程和IBM MQ方面,我是一个全新的人(因为我几乎没有开始使用IBM MQ昨天)。
无论如何,在阅读了很多指南和示例,并对许多内容进行故障排除后,我设法制作了一个连接到QueueManager的C#解决方案,并成功发送和读取消息。但是,我只是通过禁用默认授权来实现这一目的,虽然我需要做的就是测试我的Adapter类,但我现在需要能够指定用户ID和密码,并最终恢复所有我禁用了授权设置。
这是问题,每当我尝试将USER_ID_PROPERTY属性添加到connectionProperties Hashtable时,QMQueueManager构造函数返回Null引用系统异常。
以下是我构建Hashtable的代码;
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(String queueManagerName) 在IBM.WMQ.MQQueueManager..ctor(String 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.
谢谢。
答案 0 :(得分:4)
这是一个产品缺陷(我也提到过它)。基本上,如果你提供一个用户ID,你必须提供一个密码,因为代码取消引用密码字段而不先检查它是否提供...抱歉!
答案 1 :(得分:0)
我认为你有一个不同的问题。我在C#.NET中一直将UserId和Password设置为Hashtable属性而没有任何问题。请参阅我的帖子HERE。
尝试使用其他/更低版本的.NET框架版本。即您可能正在使用IBM不支持的那个。