将USER_ID_PROPERTY添加到Hashtable

时间:2017-09-14 10:49:57

标签: c# authentication ibm-mq

基本上,我在工作中遇到了一个涉及使用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.

谢谢。

2 个答案:

答案 0 :(得分:4)

这是一个产品缺陷(我也提到过它)。基本上,如果你提供一个用户ID,你必须提供一个密码,因为代码取消引用密码字段而不先检查它是否提供...抱歉!

答案 1 :(得分:0)

我认为你有一个不同的问题。我在C#.NET中一直将UserId和Password设置为Hashtable属性而没有任何问题。请参阅我的帖子HERE

尝试使用其他/更低版本的.NET框架版本。即您可能正在使用IBM不支持的那个。