【问题标题】:Connecting to the MQ Server using CCDT使用 CCDT 连接到 MQ 服务器
【发布时间】:2014-09-29 03:47:19
【问题描述】:

我正在尝试使用CCDT 文件中的信息连接到MQ。我目前可以使用所有详细信息连接到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);
 }
}
}

我使用URI(在 C# 中)来设置文件位置,而不是 URL。 (这可能被错误地使用了。不知道还能用什么。)

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

但我不能在 URI 上使用 openConnection()。还有,

queueManager = new MQQueueManager("SDCQMGR.T1",ccdtFileUrl); 给出参数重载异常。由于 C# 不支持 URI。

我尝试查找示例,但我找到了一些 JMS 示例,仅此而已。正在寻找一些示例代码以使用 C# 进行连接。

【问题讨论】:

    标签: c# ibm-mq


    【解决方案1】:

    您需要设置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);
            }
    

    【讨论】:

    • 只是一些澄清。 QM1 是我的队列管理器名称。另外,在设置AMQCLCHL.TAB 时,我应该如何指定我的位置?它位于D:/AMQCLCHL.TAB(在硬盘上)或\TAB\AMQCLCHL.TAB(在我的项目中,已导入)。
    • 好的。请问格式?只是"D:/AMQCLCHL.TAB" ?
    • 参见上面的示例代码。它分别设置路径(MQCHLLIB)和文件名(MQCHLTAB)。
    • 不是路径格式的问题。检查 CCDT 文件中指定的队列管理器名称是否与您指定的应用程序相同。
    • 很抱歉这么笨。这是我当前设置变量的代码。 System.Environment.SetEnvironmentVariable("MQCHLLIB", "D:/"); System.Environment.SetEnvironmentVariable("MQCHLTAB", "AMQCLCHL.TAB"); 我仍然遇到同样的错误。队列管理器名称正确。
    猜你喜欢
    • 1970-01-01
    • 2018-02-08
    • 1970-01-01
    • 2015-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-17
    • 1970-01-01
    相关资源
    最近更新 更多