3

我们正在使用 c# 开发一个控制台应用程序来访问 IBM WMQ。我们正在使用 IBM Message Service Client for .net (XMS) 和 WebSphere MQ 客户端。以下是代码示例:

            XMSFactoryFactory xff = XMSFactoryFactory.GetInstance(XMSC.CT_WMQ);
            IConnectionFactory cf = xff.CreateConnectionFactory();
            cf.SetStringProperty(XMSC.WMQ_HOST_NAME, "host");
            cf.SetIntProperty(XMSC.WMQ_PORT, 1445);
            cf.SetStringProperty(XMSC.WMQ_CHANNEL, "channel");
            cf.SetIntProperty(XMSC.WMQ_CONNECTION_MODE, XMSC.WMQ_CM_CLIENT);
            cf.SetStringProperty(XMSC.WMQ_QUEUE_MANAGER, "queueManager");
            cf.SetIntProperty(XMSC.WMQ_BROKER_VERSION, XMSC.WMQ_BROKER_V1);
            cf.SetStringProperty(XMSC.USERID, @"userid");
            cf.SetStringProperty(XMSC.PASSWORD, @"");

            IConnection conn = cf.CreateConnection();
            conn.ExceptionListener = new ExceptionListener(OnXMSExceptionReceived);
            Console.WriteLine("connection created");
            ISession sess = conn.CreateSession(false, AcknowledgeMode.AutoAcknowledge);

我们不断收到以下错误:CWSMQ0044E:用户无权连接到队列管理器。应用程序试图在未经授权的情况下连接到队列管理器。确保该用户的队列管理器上存在适当的权限。

但是我们使用spring集成访问同一个MQ是没有问题的。这是弹簧集成的设置:

<bean id="connectionFactoryWBI" class="com.ibm.mq.jms.MQQueueConnectionFactory">
    <property name="hostName" value="${hostName}" />
    <property name="port" value="${port}" />
    <property name="queueManager" value="${queueManager}" />
    <property name="channel" value="${channel}" />
    <property name="transportType" value="1" />
</bean>

<bean id="connectionFactoryWBIWithCredentials" class="org.springframework.jms.connection.UserCredentialsConnectionFactoryAdapter">
    <property name="targetConnectionFactory" ref="connectionFactoryWBI" />
    <property name="username" value="${username}" />
</bean>

我是 XMS 和 .net 的新手,不知道如何传递身份验证信息以连接到 MQ。任何建议都非常受欢迎!

4

1 回答 1

3

XMS .NET 和 MQ JMS 客户端的工作方式略有不同。当连接到队列管理器时,XMS .NET 首先发送当前登录的 Windows 用户 ID,然后发送应用程序指定的用户 ID。如果这两个用户 id 相同,则创建连接。但是,如果它们不同,那么您将得到CWSMQ0044E错误。这基本上是 MQ 原因代码 2035,MQRC_NOT_AUTHORIZED。但是,对于 MQ JMS,只发送应用程序指定的用户 ID,不发送 Windows 用户 ID。因此,您看不到错误。

有多种方法可以解决您在使用 XMS .NET 时遇到的问题:
1) 使用 MQ 服务器端安全出口。
2) 通道认证记录(从 MQ v7.1 开始提供)

这个问题已经在这里讨论过了。

于 2012-11-28T04:28:02.457 回答