【问题标题】:Item has already been added. Key in dictionary: 'Hostname' Key being added: 'Hostname' in c#项目已添加。字典中的键:'Hostname' 添加的键:C# 中的'Hostname'
【发布时间】:2015-07-08 10:12:04
【问题描述】:

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

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

我已尝试验证如下,

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 方法中。

【问题讨论】:

    标签: c# ibm-mq


    【解决方案1】:

    Yuk(对未来的支持感到头疼)。

    • 首先,MQEnvironment 类是一个静态类,只能用于超级简单的程序。 IBM MQ 最佳实践是使用 HashTable。

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

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

    MQC.TRANSPORT_MQSERIES_BINDINGS - 作为服务器连接 MQC.TRANSPORT_MQSERIES_CLIENT - 作为非 XA 客户端连接 MQC.TRANSPORT_MQSERIES_XACLIENT - 作为 XA 客户端连接 MQC.TRANSPORT_MQSERIES_MANAGED - 作为非 XA 托管客户端连接

    下面是正确的编码方式:

    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);
    

    【讨论】:

    • 从 7.1 版开始,MQ .NET 客户端也支持托管模式下的 XA 事务。
    【解决方案2】:

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

    MQEnvironment.properties.ContainsKey("HostName")
    

    等等

    【讨论】:

    • intPortstrChannel 也是如此
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-14
    • 2020-10-05
    • 1970-01-01
    • 2013-02-16
    • 1970-01-01
    • 2013-03-18
    相关资源
    最近更新 更多