运行修复并重新提交自定义异常处理程序示例

修复和重新提交自定义异常处理程序示例演示了一种极其有效的技术,用于将人工干预集成到基于 ESB 和 Microsoft BizTalk 的应用程序流程,并实现有用的设计模式。 示例代码无缝集成到 ESB 异常管理系统中。

此示例演示如何在业务流程中使用自定义异常处理程序。 当业务流程中的进程(EAIProcess.odx)遇到错误时,异常处理程序将生成并发布 ESB 错误消息。 此错误消息包含其有效负载中的消息(包括其与 BizTalk 相关的上下文属性),这些消息在发生异常时处于“正在飞行”状态,以及 BizTalk 业务流程引擎捕获的当前 System.Exception 实例。 当这种情况发生时,将把“已拒绝”消息和“已批准”消息与错误消息一起存储。

名为 EAIProcessHandler.odx 的第二个编排,它以分离的方式部署并作为自定义异常处理程序,订阅在 EAIProcess.odx 编排中生成的特定错误代码,并处理错误消息。 此异常处理程序提取原始消息(作为类型化文档)和最初保留在错误消息中的 System.Exception 实例。

原始消息及其所有原始上下文属性现在均可用于处理。 然后,自定义异常处理程序(EAIProcessHandler.odx)将“拒绝”和“已批准”消息写入以下位置的文件系统:

  • 已批准的消息:

    • \Source\Samples\Exception Handling\Test\Filedrop\EAIProcess.PostApproval
  • 消息被拒绝,需修复并重新提交:

    • \Source\Samples\Exception Handling\Test\Filedrop\EAIProcessHandler.RepairSubmit
  • 被拒绝的信息:

    • \Source\Samples\Exception Handling\Test\Filedrop\EAIProcessHandler.PostDecline

    异常处理程序使用 Microsoft InfoPath 处理指令将“拒绝”消息序列化,以便为修复和重新提交过程而存储到文件系统。 InfoPath 模板允许用户编辑表单并重新提交结果(请参阅图 1),这会启动验证消息的 EAIProcess.odx 业务流程。

    修复并重新提交

    图 1

    InfoPath 修复和重新提交模板生成的测试消息

    此外,还有一个名为 ALL.Exceptions_FILE 的通用发送端口,该端口配置为使用 GlobalFaultProcessor 管道。 此端口订阅系统中的所有异常,即 BizTalk 失败的消息路由消息和 ESB 错误消息。 异常管理框架将它们全部规范化为单个格式,并使用 InfoPath 处理指令将其序列化为文件夹 \Source\Samples\Exception Handling\Test\Filedrop\All_Exceptions。

安装

所有异常管理示例都使用相同的核心服务和 BizTalk 应用程序项目集。 因此,必须仅安装一次异常管理示例项目才能运行所有异常管理示例。 有关如何安装异常管理示例的信息,请参阅 安装异常管理示例

运行示例应用程序

运行修复并重新提交自定义异常处理程序示例

  1. 首次运行此示例之前,请确保接收位置和发送端口 URL 指向 \Source\Samples\Exception Handling\Test\Filedrop 文件夹中的相应目录。 接收位置应指定文件夹 EAIProcess.RequestPort,发送端口 URL 应指定 EAIProcess.PostApproval 和 EAIProcessHandler.PostDecline 的文件夹。

  2. 如果 GlobalBank.ESB 应用程序尚未运行,请使用 BizTalk 管理控制台启动它。

  3. 通过将名为 Request_EAIProcessHandler.xml的示例文件(位于 \Source\Samples\Exception Handling\Test\Data 文件夹中)复制到为 EAIProcess.RequestPort_FILE 接收位置指定的文件夹,启动示例:\Source\Samples\Exception Handling\Test\Filedrop\EAIProcess.RequestPort。

  4. 打开名为 EAIProcessHandler.PostDecline 的文件夹(在 \Source\Samples\Exception Handling\Test\Filedrop 文件夹中)。 会看到异常处理业务流程生成的“已拒绝*”消息。

  5. 打开名为 EAIProcessHandler.RepairSubmit 的文件夹(在 \Source\Samples\Exception Handling\Test\Filedrop 文件夹中)。 会看到异常处理业务流程生成的“RepairSubmit”消息。

  6. 双击 RepairSubmit 文件,在相应的 InfoPath 模板中将其打开。 你将看到消息已准备好进行编辑和重新提交。

  7. “单价 ”字段的值从 0 更改为 2,然后单击 InfoPath 表单工具栏上的 “提交 ”按钮,将编辑的文档提交回 BizTalk 进行处理。 提交过程使用 BizTalk 配置的 HTTP 接收位置。

  8. 导航到 EAIProcess.PostApproval 文件夹(在 \Source\Samples\Exception Handling\Test\Filedrop 文件夹中)。 现在,你将看到包含单价更新值的“审批*”文档。

示例的工作原理

提交的消息将激活 EAIProcess 编排。 当 EAIProcess 业务流程处理消息时,它会尝试将 1 除以单价。 由于单价为零,因此会发生除零异常。 业务流程事件处理程序中的代码捕获此异常并创建错误消息。 消息中的订单数量大于 10,因此业务逻辑指示此异常的 容错字段 值为 1000

然后,EAIProcess 业务流程通过直接绑定端口将错误消息发布到 BizTalk Message Box,业务流程结束。

名为 EAIProcessHandler 的自定义故障处理编排程序(订阅具有 FaultCode 字段值为 1000 的消息)会检测到新的故障消息。 业务流程中的代码将创建“拒绝”消息和 InfoPath 文件,然后将其放入 EAIProcessHandler.PostDecline 和 EAIProcessHandler.RepairSubmit 文件夹,以便进行人工干预。