.net应用程序直接发送和接收到远程队列管理器

时间:2015-01-03 08:35:31

标签: vb.net ibm-mq

我试图将我的VB.net应用程序连接到远程队列管理器。

但继续获得关注Erorr:MQRC_Q_MGR_NAME_ERROR。谁能告诉我我做错了什么?

这是我使用的代码:

Dim mqQMgr As MQQueueManager = Nothing

            Dim props As New Hashtable()
            props.Add(MQC.HOST_NAME_PROPERTY, "192.168.28.191")
            props.Add(MQC.CHANNEL_PROPERTY, "SYSTEM.ADMIN.SVRCONN")
            props.Add(MQC.USER_ID_PROPERTY, "AQ")
            props.Add(MQC.PORT_PROPERTY, 1313)
            props.Add(MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_MQSERIES_BINDINGS)

          mqQMgr = New MQQueueManager("QMSEPAM", props)

我也试过了不同的连接方法(MQC.TRANSPORT_MQSERIES_CLIENT),我得到以下错误:

"MQRC_NOT_AUTHORIZED"

提前致谢。

1 个答案:

答案 0 :(得分:0)

您需要将MQC.TRANSPORT_PROPERTY属性设置为MQC.TRANSPORT_MQSERIES_MANAGEDMQC.TRANSPORT_MQSERIES_CLIENT,以便通过TCP / IP套接字连接到远程计算机上运行的队列管理器或与您的同一台计算机上运行申请。仅当队列管理器与您的应用程序在同一台机器上运行时才应使用MQC.TRANSPORT_MQSERIES_BINDINGS,在这种情况下,您的应用程序将使用共享内存与队列管理器进行通信。

如果您的应用程序尝试连接到远程队列管理器的用户没有权限,则抛出MQRC_NOT_AUTHORIZED(2035)。有多种方法可以提供对队列管理器的访问,与IBM MQ管理员交谈以向您提供所需的权限。看一下这个link。 BTW您使用的是哪个版本的MQ?

更新:两点

1)用户AQ是否与运行.NET应用程序的计算机的用户相同? MQ .NET v7.5将登录的用户标识发送到队列管理器以进行授权,除非您使用安全出口。如果您没有使用任何安全出口,则登录的用户ID必须存在于远程计算机上并具有连接权限。

2)不要将用户添加到mqm,因为Channel Authentication功能阻止该组中的用户连接到队列管理器

您可以阅读SO中的几个帖子:

WebSphere MQ v7.1 Security User Credentials

MQRC_NOT_AUTHORIZED error while connecting to Websphere MQ 7.1

最后,如果您只是测试应用程序并且不需要用户ID授权,则可以通过运行以下runmqsc命令来禁用通道身份验证。

ALTER QMGR CHLAUTH (DISABLED)