Обработка асинхронных ошибок Configuration Manager с помощью управляемого кода
Чтобы обработать ошибку Configuration Manager, которая возникает во время асинхронного запроса, проверьте RunWorkerCompletedEventArgs
свойство Error Exception параметра, переданное обработчику событий SmsBackgroundWorker.QueryProcessorCompleted. Если значение Error не null
равно , возникло исключение, и для обнаружения причины используется ошибка .
Если ошибка — это SmsQueryException, его можно использовать для получения базового __ExtendedException
объекта или SMS_ExtendedException
. Так как управляемая библиотека поставщика SMS не содержит оболочку этих исключений, для доступа к ним потребуется использовать объект ManagementException пространства имен System.Management.
Обработка ошибки асинхронного запроса
Создайте асинхронный запрос.
В обработчике событий асинхронного запроса SmsBackgroundWorker.QueryProcessorCompleted реализуйте код, приведенный в следующем примере.
Выполните асинхронный запрос. Чтобы протестировать обработчик исключений, передайте неправильно сформированную строку запроса, например
Select & from &&&
в метод QueryProcessorBase.ProcessQuery .
Пример
В следующем примере реализуется обработчик событий SmsBackgroundWorker.QueryProcessorCompleted .
Сведения о вызове примера кода см. в разделе Вызов фрагментов кода Configuration Manager.
void bw1_QueryProcessorCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Error != null)
{
Console.WriteLine("There was an Error");
if (e.Error is SmsQueryException)
{
SmsQueryException queryException = (SmsQueryException)e.Error;
Console.WriteLine(queryException.Message);
// Get either the __ExtendedStatus or SMS_ExtendedStatus object and display various properties.
ManagementException mgmtExcept = queryException.InnerException as ManagementException;
if (mgmtExcept != null)
{
if (string.Equals(mgmtExcept.ErrorInformation.ClassPath.ToString(), "SMS_ExtendedStatus", StringComparison.OrdinalIgnoreCase) == true)
{
Console.WriteLine("Configuration Manager provider exception");
}
else if (string.Equals(mgmtExcept.ErrorInformation.ClassPath.ToString(), "__ExtendedStatus", StringComparison.OrdinalIgnoreCase) == true)
{
Console.WriteLine("WMI exception");
}
Console.WriteLine(mgmtExcept.ErrorCode.ToString());
Console.WriteLine(mgmtExcept.ErrorInformation["ParameterInfo"].ToString());
Console.WriteLine(mgmtExcept.ErrorInformation["Operation"].ToString());
Console.WriteLine(mgmtExcept.ErrorInformation["ProviderName"].ToString());
}
}
if (e.Error is SmsConnectionException)
{
Console.WriteLine("There was a connection error :" + ((SmsConnectionException)e.Error).Message);
Console.WriteLine(((SmsConnectionException)e.Error).ErrorCode);
}
}
Console.WriteLine("Done...");
}
Метод примера имеет следующие параметры:
Параметр | Тип | Описание |
---|---|---|
sender |
- Object |
Источник события. |
e |
- RunWorkerCompletedEventArgs |
Данные события. Дополнительные сведения см. в разделе Класс RunWorkerCompletedEventArgs. |
Компиляция программы
Для этого примера на C# требуется следующее:
Пространства имен
System;
System.Collections.Generic;
System.Text
Майкрософт. ConfigurationManagement.ManagementProvider
Майкрософт. ConfigurationManagement.ManagementProvider.WqlQueryEngine
System.Management
System.ComponentModel
Assembly
microsoft.configurationmanagement.managementprovider
adminui.wqlqueryengine
System.Management
Надежное программирование
Дополнительные сведения об обработке ошибок см. в разделе Сведения об ошибках Configuration Manager.