无法使用IBM .Net API获取WebSphare MQ环境的所有队列名称

时间:2016-05-06 12:14:25

标签: c# .net ibm-mq

如何使用IBM MQ lib for .Net(IBM.WMQ),V8.0从客户端获取MQ环境的所有可用队列名称? 我编写了一个很好的.Net应用程序,用于读取和发送数据到MQ (similar founds at code project)

有人知道是否有可能/如何动态地从IBM.WMQ .NET lib获取所有可用的队列名称,就像使用工具IBM测试工具RfhUtil.exe时那样,或者像runmqsc DISPLAY QUEUE那样来自IBM .Net lib的命令?

我试图浏览APIReference manualIBM programming guide但没有成功。

2 个答案:

答案 0 :(得分:1)

MQ .NET中有一定程度的PCF支持,但它没有记录。以下是在队列管理器中显示队列名称的示例代码。

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

namespace PCFNET
{
    class Program
    {
        static void Main(string[] args)
        {
            InquireQueue();
        }

    /// <summary>
    /// Display list of queue names and queue depth for each queue
    /// </summary>
    public static void InquireQueue()
    {
        PCFMessageAgent messageAgent = null;
        try
        {
            // Create bindings connection to queue manager
            messageAgent = new PCFMessageAgent("DEMOQMGR");

            // Build Inquire command to query queue name
            PCFMessage reqeuestMessage = new PCFMessage(MQC.MQCMD_INQUIRE_Q);
            reqeuestMessage.AddParameter(MQC.MQCA_Q_NAME, "*");

            // Send request and receive response
            PCFMessage[] pcfResponse = messageAgent.Send(reqeuestMessage);

            // Process and print response.
            int pcfResponseLen = pcfResponse.Length;
            for (int pcfResponseIdx = 0; pcfResponseIdx < pcfResponseLen; pcfResponseIdx++)
            {
                try
                {
                    String qName = pcfResponse[pcfResponseIdx].GetStringParameterValue(MQC.MQCA_Q_NAME);
                    int qDepth = pcfResponse[pcfResponseIdx].GetIntParameterValue(MQC.MQIA_CURRENT_Q_DEPTH);
                    Console.WriteLine("QName: " + qName + "  Depth: " + qDepth);
                }
                catch (PCFException pcfex)
                {
                    //Ignore exception and get the next response
                }
            }
        }
        catch (PCFException pcfEx)
        {
            Console.Write(pcfEx);
        }
        catch (MQException ex)
        {
            Console.Write(ex);
        }
        catch (Exception ex)
        {
            Console.Write(ex);
        }
        finally
        {
            if (messageAgent != null)
                messageAgent.Disconnect();
        }
    }
}

}

答案 1 :(得分:0)

Java中有PCFMessageAgent个类,我可以看到一些似乎在.NET API中引用了等价的类。

只要您有权访问SYSTEM.ADMIN.COMMAND.QUEUE,就可以自己构建PCF消息。

您还需要根据SYSTEM.COMMAND.REPLY.MODELSYSTEM.MQSC.REPLY.QUEUE动态创建回复队列。