【问题标题】:When disconnecting from WebSphere MQ with C# client TCP connections are still in CLOSE_WAIT status当使用 C# 从 WebSphere MQ 断开连接时,客户端 TCP 连接仍处于 CLOSE_WAIT 状态
【发布时间】:2011-03-04 22:35:24
【问题描述】:

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

队列.Close(); log.Info("队列 IsOpen:" + Queue.IsOpen.ToString()); 队列=空; QueueManager.Disconnect(); QueueManager.Close(); log.Info("QM IsOpen:" + QueueManager.IsOpen.ToString()); log.Info("QM IsConnected:" + QueueManager.IsConnected.ToString()); 队列管理器 = 空;

我得到以下日志条目:

队列已打开:假 QM IsOpen:假 QM 已连接:错误

但几个小时后,当我从命令提示符运行 netstat -n 命令时,我得到一长串与 MQ 服务器的连接,并且这些连接中的状态为 CLOSE_WAIT

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

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

【问题讨论】:

    标签: c# ibm-mq


    【解决方案1】:

    在迁移指南中,有一个名为 Upgrading a WebSphere MQ client from Version 6.0 to Version 7.0 的部分提供了可能的解释。它指出,从 v7 开始,TCP 调整存储在客户端配置文件中。因此,如果您在 Windows 注册表中启用了 TCP Keepalive,v7 客户端将忽略它。文件的格式和位置在WebSphere MQ client configuration file中描述。

    当然,要解决这个问题,必须存在套接字泄漏。您没有提及您拥有哪个版本的 WMQ V7 客户端,但 Fix Pack README 文件确实显示了许多与套接字泄漏、断开连接后清理失败等相关的 APAR。这些都没有直接提到 C# 或 .Net,但在连接/断开问题方面存在足够多的问题,值得升级。

    所以首先尝试的也是最简单的解决方法是将 TCP Keepalive 添加到客户端配置文件中,看看它是否有帮助。当您在那里时也禁用连接共享。它不应该是一个因素,但也不应该泄漏套接字。伤不起。接下来是申请Fix Pack 7.0.1.2(撰写本文时最新),看看是否能解决问题。之后,是 PMR 时间。希望对您有所帮助。

    【讨论】:

    • 我不确定为什么这被接受为答案。建议了多种解决方法,其中一种“可能”解决了问题,但此处没有提供明确的解决方案。取消投票。
    • 问题中没有足够的信息来提供明确的解决方案。根据给定的信息,我提供了显然足以让 OP 解决问题的信息。所以我投了反对票,因为 OP 没有费心更新他的问题?如果您提出自己的问题,downvote 没有为您提供更好的答案,并且可能会导致您被想要回应的人忽略。恕我直言,这既不高效也不合适。
    • @theKing 以用户而非版主的身份这么说 - 但您是否注意到这篇文章已有三年多的历史了?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-08
    • 1970-01-01
    • 1970-01-01
    • 2021-09-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多