我有以下代码连接到远程计算机以执行WMI查询。
var managementScope = new ManagementScope
{
Path = new ManagementPath(@"\\hostname\root\cimv2")
};
managementScope.Connect();
完成查询远程计算机后,我希望关闭连接。
根据ManagementScope.IsConnected属性的文档:
创建后,作用域将断开连接,直到有人显式调用Connect,或者将作用域用于需要实时连接的任何操作。此外,只要更改范围的标识属性,范围就会与先前的连接断开连接。
为了尝试关闭连接,我添加了以下代码:
managementScope.Path = new ManagementPath(string.Empty);
但是,尽管已更改ManagementScope对象的属性,但仍然建立了与远程计算机(6.7.8.9)的连接,如主机上的netstat所示:
TCP 1.2.3.4:12345 6.7.8.9:135 TIME_WAIT
TCP 1.2.3.4:12345 6.7.8.9:49154 ESTABLISHED
程序退出后,连接将降至TIME_WAIT
并最终退出。
由于我打算在程序的生命周期内连接到许多计算机,理论上这可能会导致可用TCP端口的瓶颈或耗尽。
如何关闭WMI TCP连接?