.Net IBM MQ 错误 "MQRCCF_CFIN_PARM_ID_ERROR" 3014

.Net IBM MQ Error "MQRCCF_CFIN_PARM_ID_ERROR" 3014

当我尝试从队列管理器获取队列名称时,出现了这个错误,我不明白为什么

PCFMessage reqeuestMessage = new PCFMessage(MQC.MQCMD_INQUIRE_Q);
reqeuestMessage.AddParameter(MQC.MQIA_Q_TYPE, MQC.MQQT_LOCAL);
PCFMessage[] pcfResponse = messageAgent.Send(reqeuestMessage);

队列名称参数在哪里?

PCFMessage reqeuestMessage = new PCFMessage(MQC.MQCMD_INQUIRE_Q);
reqeuestMessage.AddParameter(MQC.MQCA_Q_NAME, "*");
reqeuestMessage.AddParameter(MQC.MQIA_Q_TYPE, MQC.MQQT_LOCAL);
reqeuestMessage.AddParameter(MQCFC.MQIACF_Q_ATTRS,
                             new int [] { MQC.MQCA_Q_NAME,
                                          MQC.MQIA_Q_TYPE,
                                          MQC.MQIA_CURRENT_Q_DEPTH,
                                          MQC.MQIA_OPEN_INPUT_COUNT,
                                          MQC.MQIA_OPEN_OUTPUT_COUNT });
PCFMessage[] pcfResponse = messageAgent.Send(reqeuestMessage);

您需要列出您请求的内容以及您希望从请求中返回的内容。

C# .NET PCF 示例不多,但有成百上千个 Java PCF 示例。只需在 Java PCF 代码之后为您的 C# .NET 代码建模。

IBM 声明未记录或维护 MQ 类 for .NET 中包含的 PCF 支持。有关参考,请参阅 IBM MQ Development 的 Mark Taylor 的 MQ 技术会议 v2.0.1.5 演示文稿“PCF Programming”的第 16 页:

  • Some use .Net classes: that interface is not documented or maintained
    • An historic accident
    • Missing newer function such as z/OS and byte string support

我确认 .NET 的 MQ 类 的 PCF 接口仍然没有记录在 IBM MQ 知识中心,但有趣的是他们最近在这个领域采用了一些 APAR 并解决了他们:


Microsoft Developer All About Interop 博客 post“PCF with IBM’s MQ Classes for .NET”有一些示例,您可能需要使用 MQCMD_INQUIRE_Q_NAMES 而不是 MQC.MQCMD_INQUIRE_Q。来自博客:

PCFMessageAgent agent = new PCFMessageAgent(c.MQ_QueueManager);
PCFMessage request= new PCFMessage(CMQCFC.MQCMD_INQUIRE_Q_NAMES);
request.AddParameter (MQC.MQCA_Q_NAME, queuename);
request.AddParameter (MQC.MQIA_Q_TYPE, MQC.MQQT_LOCAL);
PCFMessage[] responses = agent.Send(request);

另一个例子是@Sashi 对 Stack Overflow 问题“MQ Statistics Monitoring from C#/.NET”的回答。