0

让我们考虑一个编排。主要活动发生在具有 2 个关联的 Catch Exception 形状的范围形状内:1 个用于 System.Exception 和 1 个 General Exception。此业务流程使用“帮助程序”C# 类库,BizTalk 范围/捕获捕获库中引发的异常,以及其中发生的未处理异常。

我想知道我能够创建的问题是:假设一个版本的帮助程序库被发布,突然有一个以前存在的方法丢失并且编排试图调用它。不可避免地MissingMethodException会抛出 a ,这似乎会在达到 Scope 形状后立即发生。

MissingMethodException没有被编排捕获,因此消息被挂起。我意识到,通过适当的测试,这永远不会发生,但我只是试图覆盖所有发生的基础(实际上只是出于好奇)。

有没有办法捕获这些异常,或者因为它似乎发生在调用范围之前的某个级别?

4

2 回答 2

2

我想到了。我必须将包含形状的整个范围包装起来,并在另一个范围中使用我的辅助库。看来,一旦达到范围,.dll(用于帮助类库)就必须被加载和评估。

如果您查看附加的图像,我的辅助库在“ValidateWrapper”表达式形状中使用,但是在调用 a 之前编排甚至没有实现MissingMethodException(由于辅助类库中缺少方法), “GeneralScope” 形状无法捕捉到,MissingMethodException但只要我将 GeneralScope 包裹在另一个范围内,它就会MissingMethodException被捕捉到并且可以处理。

这一切都发生了,因为我通过 BizTalk 管理控制台更新了帮助程序类资源,因此编译器无法警告丢失的方法……但至少现在我知道如果它再次发生,我可以捕获异常。

在此处输入图像描述

于 2013-08-21T23:00:13.843 回答
1

您应该知道,BizTalk 中的业务流程中的异常处理方式与 .NET 中的处理方式相同:异常始终从基类 System.Exception 继承。

例如,假设您有一个自定义 MissingMethodException(继承自 System.Exception),那么您可以捕获 MissingMethodException(以获取任何特定数据)或 System.Exception。如果没有特定的 MissingMethodException 异常处理程序,两者都会触发 System.Exception 异常处理程序。

有关更多信息,我建议阅读http://www.codeproject.com/Articles/125470/Exception-Handling-for-C-Beginners

BizTalk 业务流程与该部分的 .NET 中的任何其他异常没有什么不同。

希望这可以帮助。

于 2013-08-20T20:02:08.733 回答