2017-04-20 146 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組。然後它開始工作! –