.net应用程序和IBM Websphere MQ集成
本文关键字:MQ 集成 Websphere IBM 应用程序 net | 更新日期: 2023-09-27 18:06:41
我是IBM Websphere MQ的新手,试图将消息从。net应用程序传递到驻留在远程盒上的Websphere MQ。
我正在尝试这个链接上提供的示例代码
我的代码如下所示,这是在Windows应用程序:
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
}
,但我得到以下WebSphere MQ错误 MQRC_HOST_NOT_AVAILABLE
我从我的开发机器ping远程计算机,反之亦然,工作正常。
IBM WebSphere MQ设置:
-IBM WebSphere MQ安装在远程机器上
-已创建队列管理器
-Local Queue
-服务器连接通道(显示非活动状态)
-在服务器连接通道属性下,我已经提供了MCA用户Id
-监听器状态显示Running
您很可能需要指定端口,队列管理器侦听器配置在:
const String hostName = "NSL-D254(1414)";
1414是默认值,因此最好在队列管理器上检查它,并先使用Telnet尝试。
我知道这是一个老线程,但我们最近在使用7.0.1.4的测试应用程序中遇到了类似的问题,并发现底层程序集在连接数据包中包含运行应用程序的用户名。
为了解决这个问题,我们使用PSExec作为系统用户运行应用程序。瞧,连接又开始工作了。遗留产品服务也作为LocalSystem运行,所以它作为用户传递System。