ExceptionHandler 业务流程

业务流程管理解决方案使用两种类型的异常:系统异常和应用程序异常。 系统异常包括类似资源错误(例如,网络连接故障)的事项。 此类问题可能在经过一段时间后会自行解决,从而,解决方案将重试造成系统异常的所有操作。 而导致应用程序异常的错误很少能自行解决,这些错误包括逻辑错误或某些格式不一致的问题等。 该解决方案使用 ExceptionHandlerOrch 业务流程来处理系统和应用程序错误。

订单处理阶段 (CableOrder1CableOrder2) 及其附属业务流程 (激活分析取消更改完成验证) 都使用 ExceptionHandlerOrch

注意

你可能希望在 Microsoft Visual Studio 中打开 ExceptionHandlerOrch 业务流程的情况下阅读本部分。

应用程序错误

异常处理程序首先通过在 Utilities 程序集中调用 ErrorHandler 对象的 PostError 方法来记录错误。 然后,异常处理程序将测试该错误是系统错误还是应用程序错误。 以下屏幕快照显示了处理应用程序异常的业务流程分支:

ExceptionHandler Orchestrati Branch

对于应用程序错误,业务流程会构造一个描述错误的字符串,并调用 ErrorHandlerOrch 业务流程。 此业务流程将该错误发送到操作,其中的运算符将确定是修复该错误还是终止操作。 如果运算符修复错误,则修复后的消息将从 ErrorHandlerOrch 业务流程返回,并且重试该操作。 异常处理程序通过调用 Utilities 程序集中 Recaller 对象的 Invoke 方法执行此操作。 Recaller 对象使用反射来调用导致错误的代码。

如果调用 Invoke 成功,异常处理程序将退出。 否则,它会循环回并再次尝试调用 Invoke 。 有关 Recaller 对象的详细信息,请参阅 Recaller 对象

系统错误数

下图显示了 ExceptionHandler 业务流程的系统错误分支:

ExceptionHandler Orchestration 的系统错误

对于系统错误,异常处理程序首先调用 CheckInterrupt 业务流程,然后等待一分钟。 通过等待,短期的暂时性错误(例如,网络连接问题)可在重试前清除。 在进行远程调用时,始终可能存在网络问题。

注意

在可中断设计中,通用规则为:应在任何等待期间或之后立刻测试中断,以查看是否发生了中断。

等待后,处理程序使用 Recaller 对象的 Invoke 方法运行原始代码。 如果调用成功,则该异常处理程序将退出。 否则,该处理程序将尝试两次以上,以运行原始代码。 如果所有三次尝试都失败,处理程序将构造错误字符串并调用 ErrorHandlerOrch 业务流程。

如果对系统异常的处理引发异常,则异常块将捕获它:

系统错误分支异常处理程序

异常处理程序可测试异常的类型,并可减少重试计数(如果该异常为系统异常),或设置标志以指示该异常为应用程序异常。

ErrorHandlerOrch 业务流程

下图显示了 ErrorHandlerOrch 业务流程的第一部分:

错误处理程序业务流程,第一部分

ErrorHandlerOrch 业务流程首先测试 IsBadOrder 参数,以查看错误 (IsBadOrder 为 true) 或其他错误。 如果该错误为订单错误,则该业务流程将指定原始订单返回地址中消息的目标,并将该消息发送回客户服务系统。 如果不是订单错误,则该业务流程将创建一个订单错误消息,并将其发送给操作系统。

在上述任何一种错误后,该业务流程将侦听响应消息或中断消息:

错误处理程序第二部分

如果业务流程收到响应,则它将返回到调用方。 如果业务流程收到中断消息,则会将消息传递到中断端口,并引发自定义 的 InterruptException

有关解决方案如何使用和处理中断的详细信息,请参阅 业务流程管理解决方案中的中断处理

另请参阅

业务流程管理解决方案中的异常处理
自定义异常
业务流程管理解决方案中的中断处理
Recaller 对象