为使应用程序能够检测和响应异常,开发人员必须提供异常处理程序。 此异常处理程序可以订阅单个类型的异常消息或从系统或应用程序的某些或所有部分生成的异常消息。 例如,对于来自特定系统的所有消息(例如工资系统中发生的任何异常),可能只需要单个处理程序,或者你可能需要针对特定故障(例如检测检查打印过程是否失败)的目标处理程序。
若要订阅特定类型的异常,请使用对激活接收形状有筛选器的业务流程,如以下示例所示。
Microsoft.Practices.ESB.ExceptionHandling.Schemas.Property.FaultCode == "1000";
您还可以在发送端口上设置一个过滤条件,如果消息满足特定的过滤条件,则将消息发送到文件系统或通过电子邮件发送。
示例异常处理项目
Microsoft BizTalk ESB 工具包包含多个演示异常处理的 BizTalk 应用程序示例。 可以在 \Source\Samples\Exception Handling 文件夹中找到这些示例。
还有四个 BizTalk 项目位于 GlobalBank.ESB.Samples.ExceptionHandling 解决方案中,演示如何使用 ESB 失败的业务流程异常路由机制。 这些项目已预先配置为部署到 GlobalBank.ESB BizTalk 应用程序。 项目如下:
ESB.ExceptionHandling.Schemas. 此项目包含用于示例编排的模式。
ESB.ExceptionHandling.Pipelines。 此项目包含配置有异常处理器的发送管道,用于在发送端口上订阅所有异常。 这包括 BizTalk 生成的异常以及异常管理框架生成的异常。
ESB.ExceptionHandling.Processes. 此项目包含 EAIProcess.odx 业务流程,该业务流程通过尝试除以零并调用 CreateFaultMessage 和 AddMessage 方法来生成合适的错误消息来模拟异常,如图 1 所示。
图 1
Process 示例项目中的 EAIProcess.odx 编排
ESB。ExceptionHandling.Handlers。 此项目包含 EAIGenericHandler.odx 业务流程,该业务流程调用 GetMessages 方法并使用 MoveNext 方法循环访问 MessageCollection,如图 2 所示。
图 2
Handlers 示例工程中的 EAIGenericHandler.odx 编排
ESB.ExceptionHandling.Handlers 项目还包含 EAIProcessHandler.odx 编排,该编排调用 GetMessage 和 GetException 方法,如图 3 所示。
图 3
Handlers 示例项目中的 EAIProcessHandler.odx 协调流程