.NET客户端通过SSL连接到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();
我得到的错误:
消息=“MQRC_Q_MGR_NAME_ERROR”
我也试过telneting我能做的服务器。
有些人可以帮助我,我在这里做错了,为什么我得到这个错误。
我通过设置以下env varibles解决了这个问题。 在连接之前。
Env varibles是MQCHLLIB,MQCHLTAB,MQSSLKEYR – 使用Environment.SetEnvironmentVariable – 来设置值
--- Certs location. - **Make sure you give the refarance of this DLL**
设置完所有这些之后只需调用queueManager = new MQQueueManager(); – 你应该好。
“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
-
首先,您需要在appsettings中输入密钥
"
" -
将连接表放在目录中。
-
介绍环境变量:
MQCHLLIB ->
表的目录路径,以及MQCHLTAB->Name
表文件的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");