运行修复和重新提交自定义异常处理程序示例
修复和重新提交自定义异常处理程序示例演示了一种非常有效的技术,用于将人工干预集成到基于 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 的泛型发送端口。配置为使用 GlobalFaultProcessor 管道的Exceptions_FILE。 此端口订阅系统中的所有异常,包括 BizTalk 失败的消息路由消息和 ESB 错误消息。 异常管理框架将它们全部规范化为单个格式,并使用 InfoPath 处理指令将其序列化到文件夹 \Source\Samples\Exception Handling\Test\Filedrop\All_Exceptions。
安装
所有异常管理示例都使用相同的一组核心服务和 BizTalk 应用程序项目。 因此,只需安装一次异常管理示例项目,才能运行所有异常管理示例。 有关如何安装异常管理示例的信息,请参阅 安装异常管理示例。
运行示例应用程序
运行修复和重新提交自定义异常处理程序示例
首次运行此示例之前,请确保接收位置和发送端口 URL 指向 \Source\Samples\Exception Handling\Test\Filedrop 文件夹中的相应目录。 接收位置应指定文件夹 EAIProcess.RequestPort,发送端口 URL 应指定文件夹 EAIProcess.PostApproval 和 EAIProcessHandler.PostDecline。
如果 GlobalBank.ESB 应用程序尚未运行,请使用 BizTalk 管理控制台启动它。
首先,将位于 \Source\Samples\Exception Handling\Test\Data 文件夹中的名为 Request_EAIProcessHandler.xml 的示例文件复制到为EAIProcess.RequestPort_FILE接收位置指定的文件夹:\Source\Samples\Exception Handling\Test\Filedrop\EAIProcess.RequestPort。
在 \Source\Samples\Exception Handling\Test\Filedrop 文件夹中打开名为 EAIProcessHandler.PostDecline (的文件夹) 。 你将看到异常处理业务流程生成的“已拒绝*”消息。
在 \Source\Samples\Exception Handling\Test\Filedrop 文件夹中打开名为 EAIProcessHandler.RepairSubmit (的文件夹) 。 你将看到异常处理业务流程生成的“RepairSubmit”消息。
双击 RepairSubmit 文件,在相应的 InfoPath 模板中将其打开。 你将看到消息已准备好进行编辑和重新提交。
将 “单价” 字段的值从 0 更改为 2,然后单击 InfoPath 窗体工具栏上的“ 提交 ”按钮,将编辑的文档提交回 BizTalk 进行处理。 提交过程使用 BizTalk 配置的 HTTP 接收位置。
导航到 \Source\Samples\Exception Handling\Test\Filedrop 文件夹) 中的 EAIProcess.PostApproval 文件夹 (。 现在,你将看到包含单价更新值的“审批*”文档。
示例的工作原理
提交的消息将激活 EAIProcess 业务流程。 当 EAIProcess 业务流程处理消息时,它会尝试将 1 除以单价。 由于单价为零,因此会发生除零异常。 业务流程的事件处理程序中的代码会捕获此异常并创建一条错误消息。 消息中的订单数量大于 10,因此业务逻辑指示此异常的 FaultCode 字段值为 1000。
然后,EAIProcess 业务流程通过直接绑定端口将错误消息发布到 BizTalk 消息框,业务流程将结束。
名为 EAIProcessHandler 的自定义错误处理程序业务流程订阅 FaultCode 字段值为 1000 的消息,可选取新的错误消息。 业务流程中的代码创建“拒绝”消息和 InfoPath 文件,然后将其放入 EAIProcessHandler.PostDecline 和 EAIProcessHandler.RepairSubmit 文件夹中,以便进行人工干预。