所以我有一个从ServerConnectionTools类调用的方法。它应返回ManagementObjects的集合,但是,如果我们尝试查询的服务器无法访问,则会抛出COMException。
我尝试将Connection放在try / catch中的范围内,但这意味着如果在分配之前失败,我的ret值将不会被设置。
处理此问题的最佳方法是什么?到目前为止,我一直在努力使功能正常运行,而不是专注于错误处理,所以我还在学习绳索!
我也不知道我是否应该在COMException中引发一个事件来通知调用类连接失败,或者以其他方式处理它...我会想在调用类中捕获一个COMException会是错误的方法吗?
public ManagementObjectCollection GetServicesList()
{
try
{
// Connect our scope to the actual WMI scope
this.Scope.Connect();
// Query system for Eclipse Services
ObjectQuery query = new ObjectQuery("SELECT * FROM Win32_Service WHERE Caption LIKE 'xxx%'");
ManagementObjectSearcher searcher = new ManagementObjectSearcher(this.Scope, query);
ManagementObjectCollection ret = searcher.Get();
}
catch (COMException ex)
{
ServerConnectionFailure?.Invoke(this, null);
}
return ret;
}
欢迎任何想法!
干杯 戴夫
答案 0 :(得分:0)
在
ret
区块之外保持try
的声明,以便。{ 功能它将获得它的可访问性。现在它属于try
只阻止。
因此,您的方法签名将如下所示:
public ManagementObjectCollection GetServicesList()
{
ManagementObjectCollection ret=new ManagementObjectCollection(); //declaration of the collection
try
{
this.Scope.Connect();
ObjectQuery query = new ObjectQuery("SELECT * FROM Win32_Service WHERE Caption LIKE 'xxx%'");
ManagementObjectSearcher searcher = new ManagementObjectSearcher(this.Scope, query);
ret = searcher.Get();
}
catch (COMException ex)
{
ServerConnectionFailure?.Invoke(this, null);
}
return ret;
}