gpt4 book ai didi

c# - 当 RPC 服务器不可用时在远程 WMI 上设置超时

转载 作者:太空狗 更新时间:2023-10-29 22:26:18 26 4
gpt4 key购买 nike

我有以下代码检查远程计算机上的服务状态。问题是,如果无法找到远程计算机(它已关闭或其他原因),则 ManagementObjectSearcher.Get() 方法需要 20 秒才能抛出“RPC 服务器不可用”错误.在服务器不可用的情况下,我想明确声明我只希望它尝试一小段时间(比如 3 秒)。我关注了帖子 here ,但它声明在 ManagementObjectSearcher 上使用超时选项,但我的代码似乎忽略了该值(因为它声明它与集合无关)。这些选项有什么我忽略的吗?我也尝试过使用 ReturnImmediatly 属性,但无济于事。

public static void WmiServiceCheck()
{
try
{
var computerName = "SomeInvalidComputer";
var serviceName = "Power";
var managementScope = new ManagementScope(string.Format(@"\\{0}\root\cimv2", computerName));
var objectQuery = new ObjectQuery(string.Format("SELECT * FROM Win32_Service WHERE Name = '{0}'", serviceName));
var searcher = new ManagementObjectSearcher(managementScope, objectQuery);
searcher.Options.Timeout = new TimeSpan(0, 0, 0, 3); // Timeout of 3 seconds
var managementObjectCollection = searcher.Get();
var serviceState = managementObjectCollection.Cast<ManagementObject>().ToList().Single()["State"].ToString();
/// Other stuff here
}
catch (Exception ex)
{
}
}

最佳答案

是的,不是那个。您要设置 ConnectionOptions.Timeout:

  var managementScope = new ManagementScope(...);
managementScope.Options.Timeout = TimeSpan.FromSeconds(3);

我测试时效果很好。

请记住,3 秒是低端时间,如果有一段时间没有被查询,服务器可能不得不将大量代码交换到 RAM 中来处理请求。如果服务器以其他方式保持磁盘驱动器跳动,则这不一定是快速操作。只有在您不介意偶尔出现的误报时才选择它。我个人从不在工作站上低于 10 秒,这是在 Hard Knocks 学院学到的。 20 秒对于服务器类机器是安全的。

关于c# - 当 RPC 服务器不可用时在远程 WMI 上设置超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25275565/

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