繁体   English   中英

IBM MQ Server安装程序以创建.NET Client使用的CCDT文件

[英]IBM MQ Server Setup to Create CCDT file used by .NET Client

我需要对MQ.NET客户端使用CCDT文件才能连接到MQ Server,两者都在本地运行,但是下面出现错误。

IBM.WMQ.MQException: MQRC_Q_MGR_NAME_ERROR CompCode: 2, Reason: 2058

请在下面的服务器设置和MQ.NET客户端中找到。

服务器设置

我通过以下链接设置并创建了CCDT文件:

使用IBM MQ资源管理器设置服务器

服务器连接通道:LOCAL.DEF.SVRCONN

MCA用户ID:我尝试省略它或提供它。 mqm的成员之一,也可以不是。

使用IBM MQ Explorer设置客户机

Clinet频道:LOCAL.DEF.SVRCONN

队列管理器名称:LocalQM

连接名称:192.168.1.9(1415)

192.168.1.9是本地主机地址

1415是队列管理器, LocalQM ,TCP端口。

IBM MQ.NET

代码从这里下面

        MQQueueManager qm = null;
        System.Environment.SetEnvironmentVariable("MQCHLLIB", "C:\\ProgramData\\IBM\\MQ\\qmgrs\\LocalQM\\@ipcc");
        System.Environment.SetEnvironmentVariable("MQCHLTAB", "AMQCLCHL.TAB");

        try
        {
            Hashtable props = new Hashtable();
            props.Add(MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_MQSERIES_CLIENT);
            qm = new MQQueueManager("LocalQM",props);
            MQQueue queue1 = qm.AccessQueue("LocalQueue", MQC.MQOO_OUTPUT | MQC.MQOO_FAIL_IF_QUIESCING);
            MQMessage msg = new MQMessage();
            msg.WriteUTF("Hello this message is from .net client");
            queue1.Put(msg);
            queue1.Close();
            qm.Disconnect();
        }
        catch (Exception ex)
        {
            Console.Write(ex);
        }

Windows 10上的IBM MQ V8

Windows 10上的MQ.NET Client V8

创建客户渠道定义表

在.NET中使用客户端通道定义表

UPDATE

如果我不使用CCDT更改为以下内容,则可以使用。

   var properties = new Hashtable
        {
            {MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_MQSERIES_MANAGED },         
             { MQC.HOST_NAME_PROPERTY, "192.168.1.9" }, //"localhost" },
        { MQC.PORT_PROPERTY, "1415"},
        { MQC.CHANNEL_PROPERTY, "LOCAL.DEF.SVRCONN" },
            {MQC.USER_ID_PROPERTY, "xxx" },  //usrename
            {MQC.PASSWORD_PROPERTY, "xxx" }  //password
        };
        _queueManager = new MQQueueManager(_queueManagerName, properties);

更新2我将队列管理器更改为LocalQM

C:\Users\'#.lp\source>SET MQCHLLIB=C:\ProgramData\IBM\MQ\qmgrs\LocalQM\@ipcc

C:\Users\'#.lp\source>SET MQCHLTAB=AMQCLCHL.TAB

C:\Users\'#.lp\source>echo DIS CHL(LOCAL.DEF.SVRCONN) CHLTYPE(CLNTCONN) ALL | runmqsc -n
5724-H72 (C) Copyright IBM Corp. 1994, 2015.
Starting local MQSC for 'AMQCLCHL.TAB '.

     1 : DIS CHL(LOCAL.DEF.SVRCONN) CHLTYPE(CLNTCONN) ALL
AMQ8414: Display Channel details.
   CHANNEL(LOCAL.DEF.SVRCONN)              CHLTYPE(CLNTCONN)
   AFFINITY(PREFERRED)                     ALTDATE(2018-04-16)
   ALTTIME(22.16.03)                       CERTLABL( )
   CLNTWGHT(0)                             COMPHDR(NONE)
   COMPMSG(NONE)                           CONNAME(192.168.1.9 (1415))
   DEFRECON(NO)                            DESCR( )
   HBINT(300)                              KAINT(AUTO)
   LOCLADDR( )                             MAXMSGL(4194304)
   MODENAME( )                             PASSWORD( )
   QMNAME(LocalQM)                         RCVDATA( )
   RCVEXIT( )                              SCYDATA( )
   SCYEXIT( )                              SENDDATA( )
   SENDEXIT( )                             SHARECNV(10)
   SSLCIPH( )                              SSLPEER( )
   TPNAME( )                               TRPTYPE(TCP)
   USERID( )
No commands have a syntax error.

C:\Users\'#.lp\source>

更新3:MQRC_NOT_AUTHORIZED未解决

我变了

  1. 192.168.1.9(1415)-> 192.168.1.9(1415)
  2. 将AMQCLCHL.TAB也放到C:\\ ProgramData \\ IBM \\ MQ(我不知道为什么这可能不正确,因为日志文件上的错误:

    AMQ9518:找不到文件'C:\\ ProgramData \\ IBM \\ MQ \\ AMQCLCHL.TAB'。

3我尝试了MCA用户ID->

1位是mqm成员的mqlclient

不是mqm成员的2个mqlclient

3空

但是仍然有错误。 以下是3.1的异常和错误

IBM.WMQ.MQException: MQRC_NOT_AUTHORIZED

----- cmqxrsrv.c : 2356 -------------------------------------------------------
17/04/2018 23:50:44 - Process(1848.16) User(SYSTEM) Program(amqzlaa0.exe)
                      Host(APPLE) Installation(Installation1)
                      VRMF(8.0.0.5) QMgr(LocalQM)

AMQ5540: Application 'bin\Debug\Producer.exe' did not supply a user ID
and password

EXPLANATION:
The queue manager is configured to require a user ID and password, but none was
supplied.
ACTION:
Ensure that the application provides a valid user ID and password, or change
the queue manager configuration to OPTIONAL to allow applications to connect
which have not supplied a user ID and password. 
----- amqzfuca.c : 4311 -------------------------------------------------------
17/04/2018 23:50:44 - Process(1848.16) User(SYSTEM) Program(amqzlaa0.exe)
                      Host(APPLE) Installation(Installation1)
                      VRMF(8.0.0.5) QMgr(LocalQM)

AMQ5541: The failed authentication check was caused by the queue manager
CONNAUTH CHCKCLNT(REQDADM) configuration.

EXPLANATION:
The user ID 'mqclient' and its password were checked because the user ID is
privileged and the queue manager connection authority (CONNAUTH) configuration
refers to an authentication information (AUTHINFO) object named
'SYSTEM.DEFAULT.AUTHINFO.IDPWOS' with CHCKCLNT(REQDADM). 

This message accompanies a previous error to clarify the reason for the user ID
and password check.
ACTION:
Refer to the previous error for more information. 

Ensure that a password is specified by the client application and that the
password is correct for the user ID. The authentication configuration of the
queue manager connection determines the user ID repository. For example, the
local operating system user database or an LDAP server. 

To avoid the authentication check, you can either use an unprivileged user ID
or amend the authentication configuration of the queue manager. You can amend
the CHCKCLNT attribute in the CHLAUTH record, but you should generally not
allow unauthenticated remote access. 
-------------------------------------------------------------------------------
17/04/2018 23:50:45 - Process(14900.9) User(SYSTEM) Program(amqrmppa.exe)
                      Host(APPLE) Installation(Installation1)
                      VRMF(8.0.0.5) QMgr(LocalQM)

AMQ9557: Queue Manager User ID initialization failed for 'mqclient'.

EXPLANATION:
The call to initialize the User ID 'mqclient' failed with CompCode 2 and Reason
2035.
ACTION:
Correct the error and try again. 
----- cmqxrsrv.c : 2356 -------------------------------------------------------

OP在UPDATE 2问题中添加了以下信息:

  1. SET MQCHLLIB=C:\\ProgramData\\IBM\\MQ\\qmgrs\\QM1\\@ipcc
  2. SET MQCHLTAB=AMQCLCHL.TAB
  3. echo DIS CHL(LOCAL.DEF.SVRCONN) CHLTYPE(CLNTCONN) ALL | runmqsc -n

我发现CCDT有两个可能的问题:

  1. IP和开放括号之间的CONNAME有一个空格。 这可能导致MQ忽略端口1415并使用默认端口1414,它也可能会忽略该空间,这可能不是问题,我从未测试过空间。

     COMPMSG(NONE) CONNAME(192.168.1.9 (1415)) 
  2. CLNTCONN通道的QMNAME应该与您在对new MQQueueManager的调用中指定的名称匹配,因此应该说QM1不是LocalQM ,这可能是2058错误的直接原因,但是一旦修复,#1也可能会引起问题#2。

     QMNAME(LocalQM) RCVDATA( ) 

QMNAME还有其他用途,您可以在其中指定组名或空白。 有关此的更多详细信息,请参见我对“ 使用JMS中的CCDT文件连接到IBM MQ ”的回答。 答案与JMS有关,但为setQueueManager提供的信息将与您对new MQQueueManager的调用的第一个参数相同。

通常,原因码2058(MQRC_Q_MGR_NAME_ERROR)表示您具有无效的队列管理器名称,或者服务器没有该特定的队列管理器。 检查您输入的队列管理器名称的拼写。 另外,队列管理器名称区分大小写(例如,MQA1与mqa1不同)。

而且,每个队列管理器都将有其自己的端口号。 例如1414、1415、1416等。因此,如果该服务器上正在运行多个队列管理器,请确保您使用的端口正确。

System.Environment.SetEnvironmentVariable("MQCHLLIB", "C:\\ProgramData\\IBM\\MQ\\qmgrs\\QM1\\@ipcc");
System.Environment.SetEnvironmentVariable("MQCHLTAB", "AMQCLCHL.TAB");

在启动程序之前,请尝试设置环境变量,而不要从程序内部进行设置。 我在Windows和/或.NET中发现了在程序中设置环境变量的怪异问题-有时可行,有时却不可行。

最后,您是否将应用程序与队列管理器在同一服务器上运行? 如果是这样,则以“绑定模式”而不是“客户端模式”连接。 绑定模式将更快,因为不涉及网络。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM