MQ错误原因:2058年正常工作后,随机会在C#.NET客户端中随机发生

时间:2018-08-07 15:31:14

标签: c# .net ibm-mq xms apache-nms

客户详细信息:与作为生产者将消息推入IBM MQ队列和主题的代码一起出现问题。生产者使用WebApi2作为REST接口公开,并部署在IIS上。我们正在使用C#.NET(4.5.2)客户端连接到IBM MQ。我们使用CCDT文件AMQCLCHL.TAB进行连接以获取客户端连接详细信息。使用的基础库是Apache NMS(1.8.0.4573)和IBM XMS(2.5.0.3)。

收到异常: CWSMQ0006E:调用方法ConnectionFactory.CreateConnection:CompCode:2,原因:2058。

错误详细信息:客户端正常工作,我们能够将数十万条消息推送到MQ队列和主题。但是,经过几小时到超过1周的随机时间后,客户端开始失败并出现上述错误。更多细节:

  • 通过重新启动IIS池或重新加载应用程序来解决该错误
  • 当第一个客户端(IIS服务器1)继续存在问题时,从另一个客户端(IIS服务器2)连接到同一MQ服务器继续工作

在AMQERR01.LOG文件中看到错误。

AMQ9516: File error occurred.

EXPLANATION: The filesystem returned error code 6 for file'\\...\AMQCLCHL.TAB'. 

ACTION: Record the name of the file '\\...\AMQCLCHL.TAB' and tell the systems administrator, who should ensure that file '\\...\AMQCLCHL.TAB' is correct and available. 

错误代码6为ERROR_INVALID_HANDLE

2 个答案:

答案 0 :(得分:1)

关闭连接时会发生这种情况(可能是远程服务器重新启动,网络问题等)。这确实让我回想起-我记得在2002年将Java J2EE应用程序连接到OS / 390上的MQ时就进行了处理。

最近,IBM已实现了自动重新连接设置,可以在CCDT中设置或在C#对象上手动设置。在XMS pagethe documentation for implementing that is here上进行了总结。

  

还可以通过客户端通道定义表(CCDT)或通过mqclient.ini文件启用客户端重新连接来设置属性“客户端重新连接选项”,“客户端重新连接超时”和“连接名称列表”。

答案 1 :(得分:1)

基于@JoshMc的建议,我们注意到与AMQERR01.LOG文件中访问NAS上的AMQCLCHL.TAB文件有关的间歇性错误。这似乎弄乱了我们末端的非托管客户端,该客户端只能通过IIS重新启动来解决。我们的设置已更新,可以将此文件移动到服务器上的本地磁盘,然后将我们的代码指向该文件。这样就解决了问题,自从进行此更改以来,在过去的两周中,我们一直在不断努力,没有出现问题。