【问题标题】:.NET client connecting to IBM MQ over SSL.NET 客户端通过 SSL 连接到 IBM MQ
【发布时间】:2011-02-09 10:21:26
【问题描述】:

我从客户端获得了密钥文件,我需要使用它们通过 SSL 连接到 MQ。我们从客户那里得到的文件是:

xxx.crl xxx.kdb xxx.rdb xxx.sth xxx.tab

他们在那说客户频道表。我正在尝试使用以下代码进行连接。他们说我不需要指定队列管理器,它将在客户端通道表中定义。但有一件事是他们在使用“user1”创建密钥时已经完成了。

代码:

Hashtable connectionProperties = new Hashtable(); 

// Add the connection type 
connectionProperties.Add(MQC.TRANSPORT_PROPERTY, connectionType); 

MQQueueManager qMgr; 

MQEnvironment.SSLCipherSpec = "TRIPLE_DES_SHA_US"; 
MQEnvironment.SSLKeyRepository = @"D:\Cert\BB\key"; 
MQEnvironment.UserId = "user1"; 
MQEnvironment.properties.Add(MQC.TRANSPORT_PROPERTY, connectionType); 
qMgr = new MQQueueManager(); 

我得到的错误:

消息 = "MQRC_Q_MGR_NAME_ERROR"

我也尝试过远程登录服务器,我可以做到。

可以帮我看看我在这里做错了什么以及为什么会出现这个错误。

【问题讨论】:

    标签: c# ibm-mq


    【解决方案1】:
    • 首先你需要在appsettings中输入密钥"<add key="NMQ_MQ_LIB" value="mqic32.dll" />"

    • 将连接表放在一个目录中。

    • 引入环境变量:MQCHLLIB ->表的目录路径,MQCHLTAB->Name表的文件

    • 在 C# 代码中使用 MQQueueManager 构造函数: "MQQueueManager oQueueMng = new MQQueueManager();"。该构造函数在 CCDT 中找到服务器、通道等。

    • 在C#代码中,当你需要打开一个队列来放消息时, 使用选项MQOO_BIND_NOT_FIXED 打开队列,我使用选项MQC.MQOO_OUTPUT + MQC.MQOO_BIND_NOT_FIXED + MQC.MQOO_FAIL_IF_QUIESCING 打开。 oQueueMng.AccessQueue("name of the queue", "open options");

    【讨论】:

      【解决方案2】:

      “MQRC_Q_MGR_NAME_ERROR”表示您已成功连接到 QMgr,但 QMgr 的名称与连接请求上的名称不匹配。例如,如果我的连接请求是针对 QMGRA 的,而我连接的 IP 和端口是针对 QMGRB 的,我希望得到您所看到的错误。如果我的连接请求未指定 QMgr 名称,那么我连接的任何 QMgr 都应该接受该连接。因此,似乎您的问题中未显示的环境变量、CCDT 文件或代码行指定了连接尝试之前的 QMgr 名称。不幸的是,如果没有更多信息,就不可能指出其中之一是原因。

      不用担心您获得的 user1 ID。如果这是问题,您将收到 2035 MQRC_AUTHORIZATION_ERROR 的回复。直到连接失败之后才检查 ID。

      这里有一些链接可以帮助您解决所有这些问题。这些是 WMQ v7 链接。由于 v6 已于 2011 年 9 月终止,我希望所有新开发都将在 v7 上进行。此外,.NEt 类已集成到 WMQ 基础产品中,并且从 v7 开始得到完全支持。

      MQCONN 调用示例http://bit.ly/9HG8tC

      将 WebSphere MQ 客户端应用程序连接到队列管理器 http://bit.ly/9eapRO

      将 SSL 与 WMQ .Net 客户端 http://bit.ly/9nXayP 一起使用

      【讨论】:

        【解决方案3】:

        我通过设置以下环境变量解决了这个问题。在连接之前。

        环境变量是 MQCHLLIB、MQCHLTAB、MQSSLKEYR - 使用 Environment.SetEnvironmentVariable - 设置值

        <add key="MQ_SSL_CERT_PATH" value="D:\Cert\<nameof KDB with out .kdb>" />   
        <add key="MQ_CHANNEL_LIB" value="D:\Cert" />  --- Certs location. 
        <add key="MQ_CHANNEL_TAB" value="xxx.tab" />
        <add key="NMQ_MQ_LIB" value="mqic.dll" />  - **Make sure you give the refarance of this DLL**
        

        设置完所有这些后,只需调用 queueManager = new MQQueueManager(); - 你应该很好。

        【讨论】:

        • 是否可以不设置环境变量而使用.net客户端代码
        猜你喜欢
        • 2015-01-09
        • 2011-03-04
        • 2013-11-08
        • 2022-11-08
        • 2010-09-17
        • 1970-01-01
        • 2017-04-30
        • 2016-12-14
        • 1970-01-01
        相关资源
        最近更新 更多