运行消息保留自定义异常处理程序示例
消息持久化自定义异常处理程序示例演示了一个松散耦合的泛型处理程序,该处理程序接收错误消息,提取它们所包含的 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 应用程序项目集。 因此,只需安装一次异常管理示例项目,才能运行所有异常管理示例。 有关如何安装异常管理示例的信息,请参阅 安装异常管理示例。
运行示例应用程序
运行消息持久化自定义异常处理程序示例
首次运行此示例之前,请确保接收位置和发送端口 URL 指向 \Source\Samples\Exception Handling\Test\Filedrop 文件夹中的相应目录。 接收位置应指定文件夹 EAIProcess.RequestPort,发送端口 URL 应指定文件夹 EAIGenericHandler.PostTmpMsg。
如果 GlobalBank.ESB 应用程序尚未运行,请使用 BizTalk 管理控制台启动它。
首先将名为 Request_EAIGenericHandler.xml 的示例文件(位于 \Source\Samples\Exception Handling\Test\Data 文件夹中)复制到为EAIProcess.RequestPort_FILE接收位置指定的文件夹:\Source\Samples\Exception Handling\Test\Filedrop\EAIProcess.RequestPort。
打开 \Source\Samples\Exception Handling\Test\Filedrop\ 文件夹) 中名为 EAIGenericHandler.PostTmpMsg 的文件夹 (。 你将看到原始消息。
示例的工作原理
提交的消息将激活 EAIProcess 业务流程。 当 EAIProcess 业务流程处理消息时,它会尝试将 1 除以单价。 由于单价为零,因此会发生被零除异常。 业务流程的事件处理程序中的代码捕获此异常并创建错误消息。 消息中的订单数量小于 10,因此业务逻辑指示此异常的 FaultCode 字段值为 2000。
然后,EAIProcess 业务流程通过直接绑定端口将错误消息发布到 BizTalk 消息框,业务流程结束。
名为 EAIGenericHandler 的自定义错误处理程序业务流程订阅 FaultCode 字段值为 2000 的消息,可选取新的错误消息。 业务流程中的代码从异常 (错误) 消息中提取所有消息,并将其写入磁盘文件。