.net 有没有一种方法可以不在应用服务器中安装客户端就连接到ibm mq server?

x3naxklr  于 2023-03-31  发布在  .NET
关注(0)|答案(1)|浏览(140)

我正在开发一个.net核心应用程序来连接ibm mq。由于某些客户端限制,我们无法安装Ibm mq客户端。我使用amqmdnetstd.dll(9.3.2.0)进行连接。
请注意ibm mq服务器和应用程序位于不同的系统中。
下面是我用于连接的代码片段:

MQQueue objMQQueue;
    MQMessage objPutMQMessage;
    MQMessage objReadMQMessage;
    MQQueueManager objMQQueueManager;

    string SSLCipher = string.Empty;
    string SLLKey = string.Empty;
    string QueueManager = string.Empty;
    string QueueChannel = string.Empty;
    string ConnectionName = string.Empty;
    SSLCipher = ibmOptions.SSLCipher;
    SLLKey = ibmOptions.SLLKey;

    X509Certificate2 certificate = new X509Certificate2(SLLKey, ibmOptions.SLLKeyPassword);
    Hashtable properties = new Hashtable();
    properties.Add(MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_MQSERIES_MANAGED);
    properties.Add(MQC.SSL_CERT_STORE_PROPERTY, certificate);

    Console.WriteLine(DateTime.Now.ToLongTimeString() + " Certificate object  " +                                                        JsonConvert.SerializeObject(certificate));

    QueueManager = ibmOptions.QueueManager;
    QueueChannel = ibmOptions.QueueChannel;
    ConnectionName = ibmOptions.ConnectionName;
    MQEnvironment.SSLCipherSpec = SSLCipher;           //SSL Encryption Method

    MQEnvironment.properties.Add("KeyRepository", properties);

    objMQQueueManager = new MQQueueManager(QueueManager, QueueChannel, ConnectionName);

    objMQQueue = objMQQueueManager.AccessQueue("FTS.FCUBS.IN.UAT", MQC.MQOO_OUTPUT +   MQC.MQOO_FAIL_IF_QUIESCING);
    objPutMQMessage = new MQMessage();
    //UTF-8 character encoding
    objPutMQMessage.CharacterSet = 1208;
    objPutMQMessage.WriteString("Test data");
    objPutMQMessage.Format = MQC.MQFMT_STRING;
    objPutMQMessage.MessageType = MQC.MQMT_REQUEST;
    objPutMQMessage.Report = MQC.MQRO_COPY_MSG_ID_TO_CORREL_ID;
    objPutMQMessage.ReplyToQueueName = "FTS.FCUBS.OUT.UAT";
    objMQQueue.Put(objPutMQMessage);
    objMQQueueManager.Commit();

    if (objMQQueue.OpenStatus)
    {
     objMQQueue.Close();
    }

我得到一个错误像dspmqver命令未找到。我明白这个错误是由于应用程序服务器没有安装客户端库的事实。有没有办法解决这个问题,而不安装客户端。

cetgtptt

cetgtptt1#

正如在对这个问题的评论中所暗示的那样,您共享的源代码不太可能调用dspmqver
我怀疑正在发生的事情是你正在执行你的.net代码,它抛出了一个"2538":"MQRC_HOST_NOT_AVAILABLE",然后为了进行额外的诊断,运行你的应用程序的脚本,shell到dspmqver,以获取和显示你的应用程序没有使用的MQ客户端的版本。
您需要深入研究服务器和客户端日志,以确定2538的根本原因。

相关问题