.NET客户端通过SSL连接到IBM MQ

时间:2010-04-18 17:44:31

标签: c# ibm-mq

我从客户端获取了关键文件,我需要使用它们来连接到MQ over SSL。我们从客户端获得的文件是:

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

我收到错误:

  

Message =“MQRC_Q_MGR_NAME_ERROR”

我也试过telneting我能做的服务器。

有些人可以帮助我,我在这里做错了,为什么我会收到这个错误。

3 个答案:

答案 0 :(得分:4)

我通过设置以下env varibles解决了这个问题。在连接之前。

Env varibles是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(); - 你应该好。

答案 1 :(得分:3)

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

不要担心您获得的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

一起使用

答案 2 :(得分: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");