2010-04-18 6 views
4

J'ai reçu des fichiers clés de notre client où je dois les utiliser pour me connecter à MQ via SSL. Les fichiers que nous avons reçu du client sont:Client .NET se connectant à IBM MQ via SSL

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

Ils ont dit table de canal client dans cela. J'essaie de me connecter en utilisant le code ci-dessous. Et ils disent que je n'ai pas besoin de spécifier le gestionnaire de files d'attente qu'il sera défini dans la table des canaux client. Mais une chose est qu'ils ont fait tout en créant une clé avec l'utilisation de "user1".

code:

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

erreur que je reçois:

message = "MQRC_Q_MGR_NAME_ERROR"

J'ai aussi essayé telneting le serveur que je suis capable de faire.

Peut-être m'aider ce qui ne va pas je fais ici et pourquoi je reçois cette erreur.

Répondre

0
  • Premièrement, vous devez mettre dans les appsettings la clé "<add key="NMQ_MQ_LIB" value="mqic32.dll" />"

  • Mettre la table des connexions dans un répertoire.

  • introduisons les variables d'environnement: MQCHLLIB -> Chemin vers le répertoire de la table, et MQCHLTAB->Name du fichier de la table

  • Dans le code C# utilisent le constructeur MQQueueManager: "MQQueueManager oQueueMng = new MQQueueManager();". que le constructeur trouve dans le CCDT le serveur, canal, etc.

  • Dans le code C#, lorsque vous avez besoin d'ouvrir une file d'attente pour mettre les messages, ouvrir la file d'attente avec l'option MQOO_BIND_NOT_FIXED, je vais ouvrir avec les options MQC.MQOO_OUTPUT + MQC.MQOO_BIND_NOT_FIXED + MQC.MQOO_FAIL_IF_QUIESCING . oQueueMng.AccessQueue("name of the queue", "open options");

3

Le « MQRC_Q_MGR_NAME_ERROR » signifie que vous êtes connecté avec succès à un QMGR, mais le nom du QMGR ne correspond pas au nom sur la demande de connexion. Par exemple, si ma demande de connexion est pour QMGRA et que l'IP et le port auxquels je me connecte sont pour QMGRB, je m'attendrais à recevoir l'erreur que vous voyez. Si ma demande de connexion ne spécifie pas de nom QMgr, alors tout QMgr auquel je me connecte doit accepter la connexion. Par conséquent, il semble que soit une variable d'environnement, le fichier CCDT ou une ligne de code non affichée dans votre question spécifie le nom QMgr pior à la tentative de connexion. Malheureusement, il n'est pas possible de pointer l'un d'entre eux comme la cause sans plus d'informations.

Ne vous inquiétez pas de l'ID utilisateur1 que vous avez reçu. Si c'était le problème, vous auriez reçu 2035 MQRC_AUTHORIZATION_ERROR à la place. L'ID n'est même pas vérifié jusqu'à après le point où votre connexion a échoué.

Voici quelques liens qui pourraient vous aider à faire le tri. Ce sont les liens WMQ v7. Puisque la version 6 est la fin de vie en septembre 2011, j'espère que tout nouveau développement sera sur la version 7. De plus, les classes .NEt sont intégrées dans le produit de base WMQ et entièrement prises en charge à partir de la version 7.

Exemples de MQCONN appels http://bit.ly/9HG8tC

Connexion des applications clientes WebSphere MQ à la file d'attente des gestionnaires http://bit.ly/9eapRO

SSL Utilisation avec WMQ .Net client http://bit.ly/9nXayP

4

Je sloved la question en mettant en suivant varibles env. avant la connexion.

varibles sont MQCHLLIB Env, MQCHLTAB, MQSSLKEYR - utiliser Environment.SetEnvironmentVariable - pour définir les valeurs

<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** 

Après avoir réglé tout cela il suffit d'appeler queueManager = new MQQueueManager(); - Tu devrais être bon.

+0

Est-il possible de se passer de définir des variables d'environnement et d'utiliser le code client .net – Bilgehan

Questions connexes