У меня есть метод, который вызывается из класса ServerConnectionTools. Он должен возвращать коллекцию ManagementObjects, однако, если сервер, почему мы пытаемся выполнить запрос, недоступен, он выдает COMException.Не удается вернуть ManagementObjectCollection из метода
Я попытался установить соединение в область внутри 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;
}
Любые мысли приветствуются!
Приветствия Dave
Если вы не хотите ловить COMException в классе вызывающего, вы можете бросить любое исключение, что вам нравится в улове (COMException экс). – 3per