2017-04-20 200 views
0

我对MQ很陌生,试图在我的机器上进行配置。需要安装MQ,以便我可以使用C#.NET代码在MQ中以消息形式发送/接收XML文件。我在我的机器上安装了IBM WebSphere MQ 9.0版本。据我了解,到目前为止,我需要设置队列管理器,队列和通道来达到此目的。所以我试图在MQ中设置它们。但是,当我尝试运行我的代码时,出现错误“MQRC_NOT_AUTHORIZED”。使用.Net连接到IBM WebSphere MQ会引发错误MQRC_NOT_AUTHORIZED

任何人都可以请指导我设置这些东西,以便通过.NET文件共享的场景将工作?我猜在这种情况下,我的机器上的客户端和服务器都将在本地?在创建Queue,Channel等时有很多参数可供选择,这些参数会让我感到困惑,我想我在我的设置中选择了不正确的定义。

这里是我的.Net代码:

using IBM.WMQ; 
using System; 
using System.Collections; 

namespace MQTest 
{ 

class MQTest 
{ 
    public MQQueueManager ConnectMQ() 
    { 
     MQQueueManager queueManager; 

     // Setup connection information     
     Hashtable queueProperties = new Hashtable(); 
     queueProperties[MQC.HOST_NAME_PROPERTY] = "localhost"; 
     queueProperties[MQC.PORT_PROPERTY] = 1414; 
     queueProperties[MQC.CHANNEL_PROPERTY] = "QM._TEST.SVRCONN"; 

     try 
     { 
      // Attempt the connection 
      queueManager = new MQQueueManager("QM_TEST", queueProperties); 
      Console.WriteLine("Connected Successfully"); 
     } 
     catch (MQException mexc) 
     { 
      // TODO: Setup other exception handling 
      throw new Exception(mexc.Message 
         + " ReasonCode: " + mexc.ReasonCode 
         + mexc.StackTrace, mexc); 
     } 

     // For now, return the queueManager to use in reading/writing messages next 
     return queueManager; 
    } 
} 
} 

这里是我的MQ设置的快照:

队列管理器 Queue Manager

队列 enter image description here

通道 enter image description here

监听 enter image description here

+0

AMQERR01.LOG在发生错误时有什么内容。 – JoshMc

回答

1

AladdinMQ.LOCAL.ONE

首先,它是一个坏主意,使用大小写混合MQ对象。你只是在问问题。如果不使用引号,MQ喜欢使用大写的MQ对象。所以,最好使用大写的MQ对象名称。

如果你的UserId不在mqm组中,那么你需要给你的UserId权限来(1)访问队列管理器和(2)访问队列。

这是赌注由“集团”,而不是“用户ID”做MQ权限。假设该组需要访问以“AladdinMQ。”开头的队列。以下是设置OAM权限的setmqaut命令:

setmqaut -m QM_TEST -t qmgr -g {GROUP} +connect +inq +dsp 
setmqaut -m QM_TEST -n AladdinMQ.** -t queue -g {GROUP} +allmqi +dsp 

其中{GROUP}是UserId所属的组的名称。

+0

为了补充Roger的答案,可以在MQ中几乎所有的元素(特别是通道)上设置安全权限。有可能设置一个否认,这将超过授权许可。例如,如果您拥有队列权限但被拒绝访问频道,则无法访问任何内容。另请注意,如果您发送的是频道有大小限制的大文件。 – Spence

+0

当我使用C#代码连接时,哪个用户用于连接到MQ?是我的机器登录用户吗? –

+0

我通过查看事件日志找出正在使用哪个用户,然后将该用户添加到mqm组。然后它开始工作! –