mqputing消息C#

mqputing消息C#,c#,ibm-mq,C#,Ibm Mq,我正忙于C#MQ,我想在Q上添加文本,但不确定我所做的是否有错。获取以下错误 “System.NullReferenceException”类型的未处理异常 发生在Data.Manager.dll中,发生在 Put1Queue.Put(myPutMessage,Put1PutMsgOptions) 代码如下: class Program { static void Main(string[] args) { MQ mq = new MQ(); C

我正忙于
C#MQ
,我想在Q上添加文本,但不确定我所做的是否有错。获取以下错误

“System.NullReferenceException”类型的未处理异常 发生在Data.Manager.dll中,发生在 Put1Queue.Put(myPutMessage,Put1PutMsgOptions)

代码如下:

class Program
{

    static void Main(string[] args)
    {
        MQ mq = new MQ();
        Console.Read();
    }
}

public class MQ
{

    private MQQueue queue;
    private MQMessage queueMessage;
    private MQQueueManager queueManager;

    private string queueManagerName;
    private string host;
    private int port;
    private string channel;
    private string queueName;

    public String putMsg;
    public String markerMsg;
    private MQQueueManager Put1QueueManager;
    private MQPutMessageOptions Put1PutMsgOptions;
    private MQQueue Put1Queue;

    private MQQueueManager Put2QueueManager;
    private MQPutMessageOptions Put2PutMsgOptions;
    private MQQueue Put2Queue;

    private MQQueueManager myQueueManager;
    private MQPutMessageOptions myPutMsgOptions;
    private MQQueue myQueue;

    private Hashtable queueProperties;

    public MQ()
    {
        setupTestData();

    }

    public void setupTestData()
    {

        markerMsg = "<msglamdav5_xml><system message_id=\"\" message_type=\"\" correlation_id=\"\" date_time_stamp=\"\" originator=\"\" destination=\"\" queue_manager=\"\" txn_req_number=\"\" txn_req_id=\"\"/><security user_name=\"G9022O2 \" user_type=\"\" user_identity=\"G90226K     \" user_language=\"\" environment=\"PPEX    \" host_name=\"\"/><errors/><data><txn_ctl bus_txn_phase=\"3\" bus_txn_session_id=\"\" /><data_key party_no=\"0\"/><tasks><task txn_id=\"MARK<uniqueNum> \" event_type=\"2\" external_txn_id=\"04255841252012-06-22-04.56.14.960000            \"><task_data><servicedata inputdata=\"0124473471\"/></task_data><task_metadata><lists/></task_metadata></task></tasks></data></msglamdav5_xml>";

        try { 
        // Setup connection information
        MQEnvironment.Hostname = "SLHUBQ2.sanlam.co.za";
        MQEnvironment.properties.Add(MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_MQSERIES_CLIENT);
        MQEnvironment.properties.Add(MQC.CCSID_PROPERTY, 437);
        MQEnvironment.Channel = "CLIENTS";//"EFL.SRVCONN";
        MQEnvironment.Port = 1615;//lr.eval_int("<Port>");


        Put1QueueManager = new MQQueueManager("SLHUBQ2");
        int openOptions = MQC.MQOO_OUTPUT | MQC.MQOO_INQUIRE | MQC.MQOO_FAIL_IF_QUIESCING;

        Put1Queue = Put1QueueManager.AccessQueue("LAMDA.PERF.REQUEST", openOptions, null, null, null);

        Put1PutMsgOptions = new MQPutMessageOptions();

        Put1PutMsgOptions.Options = MQC.MQPMO_NEW_MSG_ID | MQC.MQPMO_NEW_CORREL_ID;

        }
        catch (Exception error)
        {

        }

        try {
                MQMessage myPutMessage = new MQMessage();
                myPutMessage.ClearMessage();
                myPutMessage.Persistence = MQC.MQPER_PERSISTENT;
                myPutMessage.Persistence = MQC.MQPER_NOT_PERSISTENT;
                myPutMessage.CorrelationId = MQC.MQCI_NONE;
                myPutMessage.MessageId  = MQC.MQMI_NONE;

                myPutMessage.Format = MQC.MQFMT_STRING; 
                myPutMessage.ReplyToQueueName= "LAMDA.PERF.RESPONSE";

                myPutMessage.WriteString(markerMsg);


              Put1Queue.Put(myPutMessage, Put1PutMsgOptions);




        }
        catch (MQException error)
        {


        }


        try
        {
            Put1Queue.Close();
            Put1QueueManager.Disconnect();

        }
        catch (Exception error)
        {

        }



    }



    }
}
类程序
{
静态void Main(字符串[]参数)
{
MQ=新MQ();
Console.Read();
}
}
公共类MQ
{
专用MQQueue队列;
专用MQMessage队列消息;
专用MQQueueManager队列管理器;
私有字符串queueManagerName;
私有字符串主机;
专用int端口;
专用字符串通道;
私有字符串队列名称;
公共字符串putMsg;
公共字符串markerMsg;
专用MQQueueManager Put1QueueManager;
私有MQPutMessageOptions Put1PutMsgOptions;
专用MQQueue Put1Queue;
专用MQQueueManager Put2QueueManager;
私有MQPutMessageOptions Put2PutMsgOptions;
专用MQQueue PUT2队列;
专用MQQueueManager myQueueManager;
私有MQPutMessageOptions myPutMsgOptions;
私有MQQueue-myQueue;
私有哈希表队列属性;
公共MQ()
{
setupTestData();
}
public void setupTestData()
{
markerMsg=“”;
试试{
//设置连接信息
MQEnvironment.Hostname=“SLHUBQ2.sanlam.co.za”;
MQEnvironment.properties.Add(MQC.TRANSPORT_属性,MQC.TRANSPORT_MQSERIES_客户端);
MQEnvironment.properties.Add(MQC.CCSID_PROPERTY,437);
MQEnvironment.Channel=“CLIENTS”;/“EFL.SRVCONN”;
MQEnvironment.Port=1615;//lr.eval_int(“”);
Put1QueueManager=新的MQQueueManager(“SLHUBQ2”);
int openOptions=MQC.MQOO_OUTPUT | MQC.MQOO_INQUIRE | MQC.MQOO_FAIL_IF_QUIESCING;
Put1Queue=Put1QueueManager.AccessQueue(“LAMDA.PERF.REQUEST”,openOptions,null,null,null);
Put1PutMsgOptions=新的MQPutMessageOptions();
Put1PutMsgOptions.Options=MQC.MQPMO_NEW_MSG_ID | MQC.MQPMO_NEW_CORREL_ID;
}
捕获(异常错误)
{
}
试一试{
MQMessage myPutMessage=新MQMessage();
myPutMessage.ClearMessage();
myPutMessage.Persistence=MQC.MQPER_PERSISTENT;
myPutMessage.Persistence=MQC.MQPER_NOT_PERSISTENT;
myPutMessage.CorrelationId=MQC.MQCI_NONE;
myPutMessage.MessageId=MQC.MQMI_NONE;
myPutMessage.Format=MQC.MQFMT_字符串;
myPutMessage.ReplyToQueueName=“LAMDA.PERF.RESPONSE”;
myPutMessage.WriteString(markerMsg);
Put1Queue.Put(myPutMessage,Put1PutMsgOptions);
}
捕获(MQException错误)
{
}
尝试
{
Put1Queue.Close();
Put1QueueManager.Disconnect();
}
捕获(异常错误)
{
}
}
}
}

问题可能出在您的代码行中

Put1Queue = Put1QueueManager.AccessQueue("LAMDA.PERF.REQUEST", openOptions, null, null, null);
“AccessQueue”方法可能返回“null”结果。因此,您可以尝试检查:

  • 您的队列名称是否正确
  • 选项是否正确。如果停止选项,您可以尝试传递
    MQC.MQOO\u输出+MQC.MQOO\u失败

  • 您可以打印每个catch语句中的异常,因为我打赌您在AccessQueue上得到的是RC 2035,因此Put方法的Put1Queue为null。 i、 e


    在第一次捕获时未授权MQRC_。
    catch (MQException mqex)
    {
       System.Console.Out.WriteLine("MQException cc=" + mqex.CompletionCode + " : rc=" + mqex.ReasonCode);
    }
    catch (System.IO.IOException ioex)
    {
       System.Console.Out.WriteLine("IOException ioex=" + ioex);
    }
    catch (Exception ex)
    {
       System.Console.Out.WriteLine("Exception ex=" + ex);
    }