0
votes

I am new to IBM Websphere MQ and trying to pass message from .net Application to WebSphere MQ which reside on Remote Box.

i am trying the sample code provided on this link

My code is as below which is in Windows Application:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using IBM.WMQ;
using System.Collections;

namespace MQTest
{
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 = "QM785";

    // Define the name of your host connection (applies to client connections only)
  //  const String hostName = "NSL-D254(1785)";

    // Define the name of the channel to use (applies to client connections only)
 //   const String channel = "785.FIN.IDMS";



    /// <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();
        connectionProperties.Add(MQC.HOST_NAME_PROPERTY, "NSL-D254(1785)");
        connectionProperties.Add(MQC.CHANNEL_PROPERTY, "785.FIN.IDMS");
        connectionProperties.Add(MQC.USER_ID_PROPERTY, "NSLDC\truptir");
        connectionProperties.Add(MQC.PASSWORD_PROPERTY, "july@1234");

        // 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);
                break;
        }

        return connectionProperties;
    }
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static int Main(string[] args)
    {
        try
        {
            Hashtable connectionProperties = init(connectionType);
           // Environment.SetEnvironmentVariable("MQCCSID", "437");
            // 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 want to open
            int openOptions = MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_OUTPUT;

            // Now specify the queue that we want 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

}

but i am getting following WebSphere MQ error MQRC_HOST_NOT_AVAILABLE

i pinged the remote computer from my development machine and vice versa which is working fine.

IBM WebSphere MQ settings:

-IBM WebSphere MQ is installed on Remote Machine

-Created Queue Manager

-Local Queue

-Server Connection channel (which shows inactive status)

-Under Server Connection channel Properties i have provide MCA User Id

-Listener status showing Running

Am i missing anything please let me know.

2
IBM WebSphere MQ Explorer Version: 7.5.0.2Trupti

2 Answers

0
votes

Most likely you need to specify the port, the queue manager listener is configured on:

const String hostName = "NSL-D254(1414)";

1414 is the default, so better check it on the queue manager, and try it with telnet first.

0
votes

I know this is an old thread, but we recently had a similar issue with a test application using 7.0.1.4 and found the underlying assemblies are including the username running the application in the connection packet.

To fix this, we ran the application with PSExec as system user. Voila, the connections started working again. The legacy production service is also running as LocalSystem so it is passing System as the user.