4

我正在尝试使用 IBM XMS for .NET 发送文本消息。发送大约 254 条消息后,我收到以下错误:

An unhandled exception of type 'IBM.XMS.XMSException' occurred in IBM.XMS.Client.WMQ.dll

Additional information: CWSMQ0082E: Failed to send to CompCode: 2, Reason: 2017.

谷歌上没有太多关于它的内容。我在WSMQ Queue Limit找到了一篇相关的帖子

该帖子表明最大队列存在某种限制。帖子中的链接似乎不起作用。我该如何克服这个错误?

4

1 回答 1

3

MQ 有一个命令mqrc,它返回任何原因代码或消息代码的文本。2017 年意味着MQRC_HANDLE_NOT_AVAILABLE。去知识中心并搜索 2017 可以得到更好的解释。这会返回几个 API 调用页面,这些页面可以返回 2017,以及原因码本身的页面:

2017 (07E1) (RC2017):MQRC_HANDLE_NOT_AVAILABLE

该页面提供了以下问题描述:

说明
已发出 MQOPEN、MQPUT1 或 MQSUB 调用,但已达到当前任务允许的最大打开句柄数。请注意,当在 MQOPEN 或 MQPUT1 调用上指定分发列表时,分发列表中的每个队列都使用一个句柄。

我们从文档中知道,并且可以从 MQ Explorer 的 QMgr 扩展属性面板中确认,默认情况下,任何进程允许拥有的最大句柄数是 256。

MQ Explorer QMgr 扩展属性面板的屏幕截图

基于所有这些以及您的程序在 254 条消息后死亡,结论是它正在为每条消息获取一个新的句柄,PUT而不是释放它们。

通常,当有一个循环应该包含PUTandCOMMIT但也包含OPEN. 我建议仔细检查您的代码,也可能更新您的问题以在此处发布代码。

我还建议研究 MQ .Net 示例程序或使用其中之一作为您自己的代码的基础。

于 2015-06-12T14:01:36.967 回答