IBM MQ:CWSMQ0082E:无法发送到CompCode:2,原因:2017

时间:2015-06-12 13:37:09

标签: c# .net ibm-mq xms

我正在尝试使用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.

google上并没有太多关于它的信息。我在WSMQ Queue Limit

找到了一篇相关的帖子

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

1 个答案:

答案 0 :(得分:2)

MQ有一个命令mqrc,它返回任何原因代码或消息代码的文本。 2017年意味着MQRC_HANDLE_NOT_AVAILABLE。可以通过转到Knowledge Center并在2017年进行搜索来获得更好的解释。这将返回几页API调用,这些页面可以返回2017,以及原因代码本身的页面:

2017 (07E1) (RC2017): MQRC_HANDLE_NOT_AVAILABLE

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

  

<强>解释
  发出了MQOPEN,MQPUT1或MQSUB调用,但是   当前任务允许的最大打开句柄数   已经达成了。请注意,当分发列表是   在MQOPEN或MQPUT1调用上指定,分发中的每个队列   list使用一个句柄。

我们从文档中了解到,并且可以从MQ Explorer的QMgr扩展属性面板确认,默认情况下,允许任何进程的最大句柄为256.

Screen shot of MQ Explorer QMgr Extended Properties panel

基于这一切以及你的程序在254条消息之后死亡,结论是它正在抓取每条消息PUT的新句柄,而不是释放它们。

通常,当存在应该仅包含 PUTCOMMIT但仍包含OPEN的循环时会发生这种情况。我建议您仔细检查您的代码,也可以更新您的问题,以便在此处发布代码。

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