2008-11-06 3 views
1

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

два типа ошибок я беспокоюсь о является:

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

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

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

Спасибо, Ник

ответ

1

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

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

0

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

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

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

Благодарим за предложение и приносим извинения, что вы его не пробовали.