项目已添加。字典中的键:'Hostname' 正在添加的键:'Hostname' 在 c# 中

Item has already been added. Key in dictionary: 'Hostname' Key being added: 'Hostname' in c#

我正在尝试向 IBM MQ 推送消息,但是在添加主机名、通道和端口等属性时,当我继续调试而不停止时出现以下错误

项目已经添加。字典中的键:'Hostname' 正在添加的键:'Hostname' in c#.

我已尝试如下验证,

if (!MQEnvironment.properties.ContainsKey(strHost) && !MQEnvironment.properties.ContainsKey(intPort) && !MQEnvironment.properties.ContainsKey(strChannel))
                {

                    MQEnvironment.properties.Add("Hostname", strHost);
                    MQEnvironment.properties.Add("Port", intPort);
                    MQEnvironment.properties.Add("Channel", strChannel);
                    MQEnvironment.properties.Add(MQC.TRANSPORT_PROPERTY,MQC.TRANSPORT_MQSERIES);
                }

以上代码包含在我推送消息的 MQ PutMessage 方法中。

看起来已经存在的不是 strHost,而是 "Hostname"。您需要将检查更改为:

MQEnvironment.properties.ContainsKey("HostName")

等等

Yuk(以及对未来支持的头痛)。

  • 首先,MQEnvironment class 是静态的 class,应该只用于超级简单的程序。 IBM MQ 最佳实践是使用哈希表。

  • 其次,您为什么不使用提供的 MQ 键名定义? (它将消除错别字)

  • 第三,您需要查看 MQ 知识中心以获得 'TRANSPORT_PROPERTY' 的正确 MQ .NET 值。请参阅 here。 MQ .NET 有 4 个有效值:

MQC.TRANSPORT_MQSERIES_BINDINGS - connect as server MQC.TRANSPORT_MQSERIES_CLIENT - connect as non-XA client MQC.TRANSPORT_MQSERIES_XACLIENT - connect as XA client MQC.TRANSPORT_MQSERIES_MANAGED - connect as non-XA managed client

正确的编码方式如下:

Hashtable qMgrProp = new Hashtable();
qMgrProp.Add(MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_MQSERIES_CLIENT);
qMgrProp.Add(MQC.HOST_NAME_PROPERTY, strHost);
qMgrProp.Add(MQC.PORT_PROPERTY, intPort);
qMgrProp.Add(MQC.CHANNEL_PROPERTY, strChannel);

MQQueueManager qMgr = new MQQueueManager(qMgrName, qMgrProp);