我从客户端获取了关键文件,我需要使用它们来连接到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我能做的服务器。
有些人可以帮助我,我在这里做错了,为什么我会收到这个错误。
答案 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_QUIESCING
。
oQueueMng.AccessQueue("name of the queue", "open options");