4

我从我们的客户端获得了密钥文件,我需要使用它们通过 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”

我也尝试过远程登录我能够做到的服务器。

有人可以帮助我我在这里做错了什么以及为什么会出现此错误。

4

3 回答 3

4

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

环境变量是 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(); - 你应该很好。

于 2010-05-10T18:48:44.027 回答
3

“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

于 2010-04-23T14:59:11.520 回答
0
  • 首先,您需要在 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_QUIESCINGoQueueMng.AccessQueue("name of the queue", "open options");

于 2010-04-20T20:58:18.780 回答