1

我正在使用以下代码返回队列的句柄,如果队列没有任何句柄(打开的输入/输出计数为 0),它将返回 MQRCCF_Q_STATUS_NOT_FOUND 但是当它有一些打开的句柄时,它返回“未知类型”异常.

    public void getQueue(string Name)
    {
            PCFMessage reqeuestMessage = new PCFMessage(MQC.MQCMD_INQUIRE_Q_STATUS);
            reqeuestMessage.AddParameter(MQC.MQCA_Q_NAME, Name);
            reqeuestMessage.AddParameter(CMQCFC.MQIACF_Q_STATUS_TYPE, CMQCFC.MQIACF_Q_HANDLE);
            PCFMessage[] response = agent.Send(reqeuestMessage);
            foreach (PCFMessage st in response)
            {
                ...
            }
    }
4

1 回答 1

1

C# 中的 MQ PCF 支持有限,因此可能不支持某些参数。您尝试查询的参数可能不在支持的参数列表中。请注意 .NET 中的 MQ PCF 不受 IBM MQ 官方支持。

如果您的目的是查询打开输入和输出队列的应用程序的数量,您可以使用 INQUIRE_Q 命令并过滤掉输入/输出计数。示例片段在这里:

            PCFMessage reqeuestMessage = new PCFMessage(MQC.MQCMD_INQUIRE_Q);
            reqeuestMessage.AddParameter(MQC.MQCA_Q_NAME, "Q1");

            // 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++)
            {
                PCFParameter[] parameters = pcfResponse[pcfResponseIdx].GetParameters();
                foreach (PCFParameter pm in parameters)
                {
                    // We just want to print current queue depth only
                    if ((pm.Parameter == MQC.MQIA_OPEN_OUTPUT_COUNT) || (pm.Parameter == MQC.MQIA_OPEN_INPUT_COUNT))
                        Console.WriteLine("Parameter: " + pm.Parameter + " - Value: " + pm.GetValue());
                }
            }

希望这有帮助

于 2015-08-19T08:23:11.823 回答