项目已添加。字典中的键:'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);
我正在尝试向 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);