Обработка пользовательских исключений .Net в COM + (VB)? - PullRequest
1 голос
/ 06 ноября 2008

Я собираюсь начать писать компонент .Net, который будет вызываться из службы VB COM + (новый компонент - это библиотека DLL, которая обращается к веб-службе и возвращает ее на основе ответа). Я не уверен, как обрабатывать ошибки, которые могут возникнуть в коде .Net в вызывающем VB.

Меня беспокоит два типа ошибок:

  • исключений, которые я мог бы сгенерировать, если предварительное условие не выполнено (например, дата начала, указанная в качестве параметра, составляет менее 3 месяцев после даты окончания, указанной в качестве параметра; возможно, я хочу выбросить исключение StartDateNotValidException)
  • исключений, которые могут произойти как часть вызова веб-службы (тайм-аут, 404 и т. Д.).

Я хотел бы вернуть некоторую конкретную обратную связь пользователю и / или записать некоторую информацию в журнал, если возникнет какая-либо из них. Я думал о том, чтобы вернуть коды возврата Int из кода .Net и избежать исключений, но возможно, что в конечном итоге вызывающий код VB может быть перенесен в .Net, поэтому я хотел бы использовать исключения, если это возможно.

Я прочитал на MSDN , что COM Interop автоматически преобразует исключения из стандартной библиотеки в HRESULT; кто-нибудь имел опыт использования этого? Может ли это быть использовано для перевода пользовательских исключений .Net в условия ошибок, которые я могу обработать в VB?

Спасибо, Ник

Ответы [ 2 ]

1 голос
/ 06 ноября 2008

Я уверен, что видел это раньше, но это было на моей предыдущей работе, поэтому я не могу проверить детали. Я думаю, что мы унаследовали наши классы исключений от COMException и установили правильный ErrorCode (который должен переводиться как HResult в неуправляемом коде). Это очень хорошо, потому что вы можете использовать HResult в неуправляемом коде, а также правильно обрабатывать типизированное исключение в управляемом клиенте.

Пожалуйста, дайте мне знать, если это действительно работает.

0 голосов
/ 20 ноября 2008

Я закончил, используя следующий метод:

  • есть большой словарь который отображает наше приложение VB коды ошибок для наших специфичный для приложения C # custom исключения
  • написать метод, который преобразует исключения C # в коды ошибок VB (и наоборот)
  • возвращает массив строк из методов, содержащих любое дело исключения, которые произошли в вызов метода (сейчас их только два)

Причина, по которой это делается, заключается в том, что адаптировать наше дерево исключений для расширения COMException будет слишком громоздким (в любом случае более громоздким, чем приведенное выше). Поэтому я никогда не пробовал наследовать от COMException и проверять, правильно ли код ошибки преобразован в HResult.

Спасибо за предложение и извиняюсь за то, что не опробовали его.

...