运行消息持久化自定义异常处理程序示例

消息持久化自定义异常处理程序示例演示了一个松散耦合的泛型处理程序,该处理程序接收了错误消息,提取它们包含的 Microsoft BizTalk 消息,并将其作为磁盘文件写入文件系统。

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

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

消息持久化自定义异常处理程序示例与修复和重新提交自定义异常处理程序示例不同,在此示例中使用的 EAIGenericHandler.odx 业务流程不依赖于错误发布业务流程进程(EAIProcess.odx)中使用的架构。 具体而言,EAIGenericHandler.odx 编排流程从故障消息中检索原始消息的 System.Xml.XmlDocument 实例,而不是基于 EAIProcess.odx 编排流程中使用的架构的经过类型化的消息。 它还将消息作为代码可以轻松枚举的集合返回。

然后,自定义异常处理程序(EAIGenericHandler.odx)将“拒绝”和“已批准”消息写入文件系统位置 \Source\Samples\Exception Handling\Test\Filedrop\EAIGenericHandler.PostTmpMsg。

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

安装

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

运行示例应用程序

运行消息持久化自定义异常处理程序示例

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

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

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

  4. 打开名为 EAIGenericHandler.PostTmpMsg 的文件夹(在 \Source\Samples\Exception Handling\Test\Filedrop\ 文件夹中)。 你将看到原始消息。

示例的工作原理

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

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

订阅 FaultCode 字段值为 2000 的消息的自定义故障处理程序协调器 EAIGenericHandler,负责选取新的故障消息。 业务流程中的代码从异常(错误)消息中提取所有消息,并将其写入磁盘文件。