当使用C#从WebSphere MQ断开连接时,客户端TCP连接仍处于关闭等待状态

当使用C#从WebSphere MQ断开连接时,客户端TCP连接仍处于关闭等待状态,c#,ibm-mq,C#,Ibm Mq,我正在使用以下代码断开与MQQueue和MQQueueManager的连接: Queue.Close(); log.Info( "Queue IsOpen: " + Queue.IsOpen.ToString() ); Queue = null; QueueManager.Disconnect(); QueueManager.Close(); log.Info( "QM IsOpen: " + QueueManager.IsOpen.ToString() ); log.Info( "QM Is

我正在使用以下代码断开与MQQueue和MQQueueManager的连接:

Queue.Close(); log.Info( "Queue IsOpen: " + Queue.IsOpen.ToString() ); Queue = null; QueueManager.Disconnect(); QueueManager.Close(); log.Info( "QM IsOpen: " + QueueManager.IsOpen.ToString() ); log.Info( "QM IsConnected: " + QueueManager.IsConnected.ToString() ); QueueManager = null; Queue.Close(); log.Info(“Queue IsOpen:+Queue.IsOpen.ToString()); 队列=空; QueueManager.Disconnect(); QueueManager.Close(); log.Info(“QM IsOpen:+QueueManager.IsOpen.ToString()); log.Info(“QM已连接:+QueueManager.IsConnected.ToString()); QueueManager=null; 我得到了以下日志条目:

Queue IsOpen: false QM IsOpen: false QM IsConnected: false 队列等参:false QM-IsOpen:false QM已断开连接:false 但在几个小时后,当我从命令提示符下运行netstat-n命令时,我得到一个到MQ服务器的连接的长列表,这些连接中的状态是CLOSE\u WAIT

你知道为什么TCP连接没有完全关闭吗?有没有什么方法可以让我从代码中杀死那些人?目前,我必须重新启动客户端应用程序来清理打开的连接


WebSphere MQ版本是6.0.2.6,.NET库来自MQ 7。

在迁移指南中有一个名为的部分,它提供了一个可能的解释。它指出,从v7开始,TCP调优存储在客户机配置文件中。因此,如果您在Windows注册表中启用了TCP Keepalive,v7客户端将忽略它。文件的格式和位置如中所述

当然,这是一个问题,必须有一个插座泄漏。您没有提到您拥有哪个版本的WMQ V7客户机,但修复包自述文件确实显示了许多与套接字泄漏、断开连接后无法清理等相关的APAR。这些都没有直接提到C#或.Net,但在连接/断开问题上存在足够多的问题,值得升级


因此,尝试的第一个&最简单的修复方法是将TCP Keepalive添加到客户机配置文件中,并查看它是否有帮助。当您在其中时禁用连接共享。这不应该是一个因素,但也不应该是插座泄漏。没关系。下一步是应用(本文最新版本),看看这是否解决了问题。之后,是PMR时间。希望这能有所帮助。

我不知道为什么会接受这个答案。这里建议了多种变通方法,其中一种“可能”解决了问题,但没有提供最终的解决方案。这一问题没有足够的信息来提供一个明确的解决方案。根据给出的信息,我提供了OP解决问题所需的足够信息。所以我投了反对票,因为OP没有更新他的问题?否决票没有给你一个更好的答案,如果你问自己的问题,很可能会导致你被你想回答的人忽视。“这既不高效也不恰当,我说,”国王说这是作为一个用户,而不是一个版主-但你注意到这篇文章已经三年多了吗?