gpt4 book ai didi

c# - 使用 C# 客户端从 WebSphere MQ 断开连接时,TCP 连接仍处于 CLOSE_WAIT 状态

转载 作者:行者123 更新时间:2023-11-30 18:08:37 24 4
gpt4 key购买 nike

我正在使用以下代码断开与 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 IsOpen: falseQM IsOpen: falseQM IsConnected: false

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

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

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

最佳答案

查看迁移指南中有一个名为 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 时间。希望对您有所帮助。

关于c# - 使用 C# 客户端从 WebSphere MQ 断开连接时,TCP 连接仍处于 CLOSE_WAIT 状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3061513/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com