水莹儿 发表于 2015-10-3 13:52:17

基于IBM MQ的.net开发遇到的头疼问题

  背景:
  MQClient 对接MQServer服务器都是server2003,只开通了1314端口进行访问。对方IT说没有开通pin功能,但是可以对联。
  
  开始报2035 没有权限的异常。发现对方MCA标示没有设置,并且对方不愿意修改,说是成型的系统,有很多人在用。
  
  最后头疼了好长时间,在一位前和他们对接过系统的公司的人那里找到了解决方法,在系统中创建一个对方指定的用户。
  
  用此用户登录。(为此用户设置mqm权限)
  
  不知道是否MQ服务器安装的时候都应该指定MCA用户标示,是否不设定的情况下更好的理由?
  
  另从IBM扒的代码参数传递的时候用hashtable的方法传参数,看起来不错,记下来。
  
  

代码

// ===========================================================================
// Licensed Materials - Property of IBM
// 5724-H72
// (c) Copyright IBM Corp. 2003, 2005
// ===========================================================================
using System;
using System.Collections;
using IBM.WMQ;
class MQSample
{
    // The type of connection to use, this can be:-
    // MQC.TRANSPORT_MQSERIES_BINDINGS for a server connection.
    // MQC.TRANSPORT_MQSERIES_CLIENT for a non-XA client connection
    // MQC.TRANSPORT_MQSERIES_XACLIENT for an XA client connection
    // MQC.TRANSPORT_MQSERIES_MANAGED for a managed client connection
    const String connectionType = MQC.TRANSPORT_MQSERIES_CLIENT;
    // Define the name of the queue manager to use (applies to all connections)
    const String qManager = "QM_ORANGE";
    // Define the name of your host connection (applies to client connections only)
    const String hostName = "172.16.1.76(5678)";
    // Define the name of the channel to use (applies to client connections only)
    const String channel = "CLIENT.QM_ORANGE";

    /// <summary>
    /// Initialise the connection properties for the connection type requested
    /// </summary>
    /// <param name="connectionType">One of the MQC.TRANSPORT_MQSERIES_ values</param>
    static Hashtable init(String connectionType)
    {
      Hashtable connectionProperties = new Hashtable();
      // Add the connection type
      connectionProperties.Add(MQC.TRANSPORT_PROPERTY, connectionType);
      // Set up the rest of the connection properties, based on the
      // connection type requested
      switch (connectionType)
      {
            case MQC.TRANSPORT_MQSERIES_BINDINGS:
                break;
            case MQC.TRANSPORT_MQSERIES_CLIENT:
            //case MQC.TRANSPORT_MQSERIES_XACLIENT:
            //case MQC.TRANSPORT_MQSERIES_MANAGED:
                connectionProperties.Add(MQC.HOST_NAME_PROPERTY, hostName);
                connectionProperties.Add(MQC.CHANNEL_PROPERTY, channel);
                connectionProperties.Add(MQC.USER_ID_PROPERTY, userid);
                connectionProperties.Add(MQC.CCSID_PROPERTY, ccsid);
                connectionProperties.Add(MQC.PASSWORD_PROPERTY , password);
                break;
      }
      return connectionProperties;
    }
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
   
    static int Main(string[] args)
    {
      try
      {
            Hashtable connectionProperties = init(connectionType);
            // Create a connection to the queue manager using the connection
            // properties just defined
            MQQueueManager qMgr = new MQQueueManager(qManager, connectionProperties);
            // Set up the options on the queue we wish to open
            int openOptions = MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_OUTPUT;
            // Now specify the queue that we wish to open,and the open options
            MQQueue system_default_local_queue =
            qMgr.AccessQueue("SYSTEM.DEFAULT.LOCAL.QUEUE", openOptions);
            // Define a WebSphere MQ message, writing some text in UTF format
            MQMessage hello_world = new MQMessage();
            hello_world.WriteUTF("Hello World!");
            // Specify the message options
            MQPutMessageOptions pmo = new MQPutMessageOptions(); // accept the defaults,
            // same as MQPMO_DEFAULT
            // Put the message on the queue
            system_default_local_queue.Put(hello_world, pmo);

            // Get the message back again
            // First define a WebSphere MQ message buffer to receive the message
            MQMessage retrievedMessage = new MQMessage();
            retrievedMessage.MessageId = hello_world.MessageId;
            // Set the get message options
            MQGetMessageOptions gmo = new MQGetMessageOptions(); //accept the defaults
            //same as MQGMO_DEFAULT
            // Get the message off the queue
            system_default_local_queue.Get(retrievedMessage, gmo);
            // Prove we have the message by displaying the UTF message text
            String msgText = retrievedMessage.ReadUTF();
            Console.WriteLine("The message is: {0}", msgText);
            // Close the queue
            system_default_local_queue.Close();
            // Disconnect from the queue manager
            qMgr.Disconnect();
      }
      //If an error has occurred in the above,try to identify what went wrong.
      //Was it a WebSphere MQ error?
      catch (MQException ex)
      {
            Console.WriteLine("A WebSphere MQ error occurred: {0}", ex.ToString());
      }
      catch (System.Exception ex)
      {
            Console.WriteLine("A System error occurred: {0}", ex.ToString());
      }
      return 0;
    }//end of start
}//end of sample

  
  
页: [1]
查看完整版本: 基于IBM MQ的.net开发遇到的头疼问题