创建自定义异常处理程序

对于应用程序要检测和响应异常,开发人员必须提供异常处理程序。 此异常处理程序可以订阅单种类型的异常消息或从系统或应用程序的部分或所有部分生成的异常消息。 例如,对于来自特定系统 ((例如工资单系统) 中发生的任何异常)的所有消息,可能只需要一个处理程序,或者可能需要针对特定故障 ((例如检测检查打印进程是否) 失败)的目标处理程序。

若要订阅特定类型的异常,请使用在激活接收形状上具有筛选器的业务流程,如以下示例所示。

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.Process。 此项目包含 EAIProcess.odx 业务流程,该业务流程通过尝试除以零来模拟异常,并调用 CreateFaultMessageAddMessage 方法来生成合适的错误消息,如图 1 所示。

    业务流程进程示例

    图 1

    Process 示例项目中的 EAIProcess.odx 业务流程

  • Esb。ExceptionHandling.Handlers。 此项目包含 EAIGenericHandler.odx 业务流程,该业务流程调用 GetMessages 方法并使用 MoveNext 方法循环访问 MessageCollection,如图 2 所示。

    业务流程处理程序示例泛型

    图 2

    Handlers 示例项目中的 EAIGenericHandler.odx 业务流程

    ESB。ExceptionHandling.Handlers 项目还包含 EAIProcessHandler.odx 业务流程,该业务流程调用 GetMessageGetException 方法,如图 3 所示。

    业务流程处理程序示例进程

    图 3

    Handlers 示例项目中的 EAIProcessHandler.odx 业务流程