ExceptionHandler 业务流程
业务流程管理解决方案使用两种类型的异常:系统异常和应用程序异常。 系统异常包括类似资源错误(例如,网络连接故障)的事项。 此类问题可能在经过一段时间后会自行解决,从而,解决方案将重试造成系统异常的所有操作。 而导致应用程序异常的错误很少能自行解决,这些错误包括逻辑错误或某些格式不一致的问题等。 该解决方案使用 ExceptionHandlerOrch 业务流程来处理系统和应用程序错误。
订单处理阶段 (CableOrder1、 CableOrder2) 及其附属业务流程 (激活、 分析、 取消、 更改、 完成、 验证) 都使用 ExceptionHandlerOrch。
注意
你可能希望在 Microsoft Visual Studio 中打开 ExceptionHandlerOrch 业务流程的情况下阅读本部分。
应用程序错误
异常处理程序首先通过在 Utilities 程序集中调用 ErrorHandler 对象的 PostError 方法来记录错误。 然后,异常处理程序将测试该错误是系统错误还是应用程序错误。 以下屏幕快照显示了处理应用程序异常的业务流程分支:
Branch
对于应用程序错误,业务流程会构造一个描述错误的字符串,并调用 ErrorHandlerOrch 业务流程。 此业务流程将该错误发送到操作,其中的运算符将确定是修复该错误还是终止操作。 如果运算符修复错误,则修复后的消息将从 ErrorHandlerOrch 业务流程返回,并且重试该操作。 异常处理程序通过调用 Utilities 程序集中 Recaller 对象的 Invoke 方法执行此操作。 Recaller 对象使用反射来调用导致错误的代码。
如果调用 Invoke 成功,异常处理程序将退出。 否则,它会循环回并再次尝试调用 Invoke 。 有关 Recaller 对象的详细信息,请参阅 Recaller 对象。
系统错误数
下图显示了 ExceptionHandler 业务流程的系统错误分支:
的系统错误
对于系统错误,异常处理程序首先调用 CheckInterrupt 业务流程,然后等待一分钟。 通过等待,短期的暂时性错误(例如,网络连接问题)可在重试前清除。 在进行远程调用时,始终可能存在网络问题。
注意
在可中断设计中,通用规则为:应在任何等待期间或之后立刻测试中断,以查看是否发生了中断。
等待后,处理程序使用 Recaller 对象的 Invoke 方法运行原始代码。 如果调用成功,则该异常处理程序将退出。 否则,该处理程序将尝试两次以上,以运行原始代码。 如果所有三次尝试都失败,处理程序将构造错误字符串并调用 ErrorHandlerOrch 业务流程。
如果对系统异常的处理引发异常,则异常块将捕获它:
异常处理程序
异常处理程序可测试异常的类型,并可减少重试计数(如果该异常为系统异常),或设置标志以指示该异常为应用程序异常。
ErrorHandlerOrch 业务流程
下图显示了 ErrorHandlerOrch 业务流程的第一部分:
ErrorHandlerOrch 业务流程首先测试 IsBadOrder 参数,以查看错误 (IsBadOrder 为 true) 或其他错误。 如果该错误为订单错误,则该业务流程将指定原始订单返回地址中消息的目标,并将该消息发送回客户服务系统。 如果不是订单错误,则该业务流程将创建一个订单错误消息,并将其发送给操作系统。
在上述任何一种错误后,该业务流程将侦听响应消息或中断消息:
如果业务流程收到响应,则它将返回到调用方。 如果业务流程收到中断消息,则会将消息传递到中断端口,并引发自定义 的 InterruptException。
有关解决方案如何使用和处理中断的详细信息,请参阅 业务流程管理解决方案中的中断处理。