Блок обработки исключений - как заменить исходное сообщение своим, основываясь на некоторых свойствах исходного сообщения? - PullRequest
0 голосов
/ 02 июля 2011

Я создаю библиотеку классов, которая использует агрегированный (встроенный) COM-объект.Методы и свойства этого COM-объекта могут генерировать COMException, свойство ErrorCode которого HRESULT указывает на ошибки во внутренней логике COM-объекта.

Например, HRESULT (и, следовательно, COMException.ErrorCode) = -1001 означает, что входной параметр определенного метода имеет неправильный формат.

Я хочу использовать блок приложения обработки исключений вмою библиотеку и замените COMExceptions значимым ErrorCode на мои пользовательские исключения следующим образом:

COMException.ErrorCode = -1001 ---> MyLibraryException.ErrorReason = DeviceError.BadFormatOfInputParam && MyLibraryException.InnerException = originalCOME1008 *, где DeviceError - это enum &, где определен DeviceError memeber для каждого конкретного HRESULT из COM-объекта.

Как этого добиться, используя блок обработки исключений?

Спасибо

Ответы [ 2 ]

0 голосов
/ 04 июля 2011

Более простой метод, но менее желательный, - генерировать новое исключение как более стандартный тип исключения.

например, для исключения SOAP:

catch (System.Web.Services.Protocols.SoapException soapEx)
{
    throw new Exception("System.Web.Services.Protocols.SoapException"
            + Environment.NewLine 
            + soapEx.Detail.InnerText
        , soapEx);
}

Это менее желательно, поскольку вам нужно перехватывать и перебрасывать каждый раз, когда вы вызываете метод COM, другими словами, много повторяющегося кода.

Создание собственного обработчика исключений, который выполняет вышеприведенное, как говорит @Chris Tavares, намного лучше.Вам нужно создать обработчик исключения только один раз, и вы можете настроить политику «COM Method» в конфигурации EL, которая выполняет обработку.

0 голосов
/ 03 июля 2011

Вам нужно написать собственный обработчик исключений и подключить его к блоку.

Вы не говорите, какую версию Entlib вы используете.Если это версия 5.0 или более поздняя, ​​возьмите Лабораторные практические занятия по расширению корпоративной библиотеки .Первое упражнение о том, как написать собственный обработчик исключений.

Оттуда вам просто нужно реализовать свою логику, чтобы делать все, что вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...