2014-09-29 152 views
0

我試圖使用CCDT文件中的信息連接到MQ。我目前可以使用所有的細節連接到MQ,並獲取並放入隊列中的消息。使用CCDT連接到MQ服務器

大量的谷歌搜索後,我一直無法找到任何示例代碼,允許我使用CCDT文件連接。

其中一位同事向我轉發了他的JMS連接代碼,但我無法將其移植到C#

JAVA代碼如下 -

public class MQTest { 
public static void main(String[] args) { 

    MQQueueManager queueManager = null; 
    URL ccdtFileUrl = null; 
    MQMessage mqMessage = null; 
    //MQPutMessageOptions myPMO = null 
    try { 
    String QM = "IB9QMGR"; 
    String QUEUE1 = "TEST"; 

    System.out.println("Starting MQClient Put Program: "); 
    ccdtFileUrl = new URL("file:///D:/AMQCLCHL.TAB") ; 
    ccdtFileUrl.openConnection(); 
    queueManager = new MQQueueManager("SDCQMGR.T1", ccdtFileUrl); 

    System.out.println("Connected to QMGR "); 
    int openOptions = MQC.MQOO_OUTPUT; 
    MQQueue InQueue = queueManager.accessQueue(QUEUE1,openOptions,null,null,null); 
    MQMessage inMessage = new MQMessage(); 
    inMessage.writeString("###Testing####"); 
    InQueue.put(inMessage); 
    System.out.println("Message Id is :" + inMessage.messageId); 
    System.out.println(inMessage.toString()); 
    InQueue.close(); 
    queueManager.disconnect() ; 
} 
catch(MQException ex){ 
    System.out.println("MQ Error - Reason code :" + ex.reasonCode); 
} 
catch (Exception e){ 
    System.out.println("Error : " + e); 
} 
} 
} 

代替URL,我使用的URI(在C#)來設置的文件位置。 (這可能被錯誤地使用。不知道要使用的,雖然還有什麼。)

Uri ccdtFileUrl = new Uri("file:///D:/AMQCLCHL.TAB") ; 

,但我不能在URI使用openConnection()。另外,

queueManager = new MQQueueManager("SDCQMGR.T1",ccdtFileUrl); 給出了一個參數重載異常。由於URI在C#中不受支持。

我試過查找樣本,但我發現了一些JMS樣本,那就是它。尋找一些示例代碼在C#中進行連接。

回答

3

您需要將MQCHLLIBMQCHLTAB環境變量設置爲使用CCDT。您可以通過命令提示符,app.config或應用程序本身的代碼來設置這兩個變量。

下面的例子演示的CCDT用法:

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

     try 
     { 
      **Hashtable props = new Hashtable(); 
      props.Add(MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_MQSERIES_CLIENT); 
      qm = new MQQueueManager("QM1",props);** 
      MQQueue queue1 = qm.AccessQueue("SYSTEM.DEFAULT.LOCAL.QUEUE", 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); 
     } 
+0

只是一些澄清。 'QM1'是我的隊列管理器名稱。 此外,在設置「AMQCLCHL.TAB」時,應該如何指定我的位置?它在'D:/ AMQCLCHL.TAB'(在HDD上)或'\ TAB \ AMQCLCHL.TAB'(在我的項目中,導入)。 – doodla 2014-09-29 04:43:36

+0

它應該指向文件系統上的一個。 – Shashi 2014-09-29 05:06:13

+0

好的。請格式化?只是'「D:/AMQCLCHL.TAB」'? – doodla 2014-09-29 05:08:42