Обработка исключений в Biztalk, которые не попадают в форму Scope
Давайте подумаем об оркестровке. Основные действия выполняются в пределах формы области действия с двумя связанными формами Catch Exception: 1 для System.Exception и 1 General Exception. Эта оркестровка использует "вспомогательную" библиотеку классов C#, а область действия / ловушка BizTalk ловит исключения, которые выдают в библиотеке, а также необработанные исключения, которые происходят внутри них.
Вопрос, который меня интересует, который я могу создать, заключается в следующем: скажем, версия вспомогательной библиотеки публикуется, и вдруг отсутствует метод, который ранее существовал, и оркестровка пытается вызвать его. Неизбежно MissingMethodException
бросается, что, кажется, происходит, как только форма Scope достигнута.
MissingMethodException
не пойман оркестровкой и поэтому сообщение приостановлено. Я понимаю, что при правильном тестировании это никогда не должно произойти, но я просто пытаюсь охватить все основы, если они произойдут (и на самом деле просто из любопытства).
Есть ли способ отловить эти исключения, или, так как это, кажется, происходит на уровне до вызова области?
2 ответа
Я понял. Я должен был обернуть всю область, которая содержала фигуры, использующие мои вспомогательные библиотеки, также в другой области. Похоже, что.dll (для вспомогательной библиотеки классов) должны были быть загружены и оценены, как только достигнута область.
Если вы посмотрите на прикрепленное изображение, мои вспомогательные библиотеки используются в форме выражения "ValidateWrapper", но оркестровка даже не делала этого до MissingMethodException
вызывался (из-за отсутствия метода в библиотеке вспомогательных классов), форма "GeneralScope" не смогла перехватить MissingMethodException
но как только я завернул GeneralScope в другую область, MissingMethodException
был пойман этим и мог быть обработан.
Все это произошло потому, что я обновил ресурс класса помощника через консоль администратора BizTalk, чтобы компилятор не смог предупредить об отсутствующем методе... но, по крайней мере, теперь я знаю, что могу перехватить исключение, если это произойдет снова.
Вы должны знать, что исключения в оркестрации в BizTalk обрабатываются так же, как и в.NET: исключения всегда наследуются от базового класса System.Exception.
Например, у вас есть пользовательское MissingMethodException (которое наследуется от System.Exception), тогда вы можете либо перехватить MissingMethodException (чтобы иметь какие-либо конкретные данные), либо System.Exception. Оба будут запускать обработчик исключений System.Exception, если нет определенного обработчика исключений MissingMethodException.
Для получения дополнительной информации, я бы предложил прочитать http://www.codeproject.com/Articles/125470/Exception-Handling-for-C-Beginners
Оркестровки BizTalk ничем не отличаются от любых других исключений в.NET для этой части.
Надеюсь это поможет.