创建并发布故障消息
为了帮助你了解如何使用异常管理框架的功能来管理异常,本部分提供了基于向 ESB 应用程序提交消息的常见方案。
该方案包括用户向系统提交发票。 在业务流程中处理发票的过程中,BizTalk 业务规则引擎会引发应用程序异常,因为数据的某些部分不正确。 业务流程应捕获异常,将有问题的消息发送给可更正该消息的其他人员或系统,然后重新提交该消息进行处理。
使用 ESB 失败的业务流程异常路由功能时,过程步骤如下:
异常处理程序中的代码通过调用 CreateFaultMessage 方法检测错误并创建错误消息,如以下代码示例所示。
// Create fault exception message. faultMsg = Microsoft.Practices.ESB.ExceptionHandling.ExceptionMgmt.CreateFaultMessage();
ESB 异常机制会自动将错误说明插入到错误消息上下文中, (例如,“业务规则引擎在处理 LoanProcessing 策略时抛出一个除以零的错误。) 。
ESB 异常机制自动将特定于故障的属性和特定于应用程序的属性提升到错误消息上下文中,并设置当前环境中的值。 这些属性如下所示:
应用程序 (自动填充)
DateTime (自动填充为 UTC 值)
说明 (自动填充 - 异常消息)
ErrorType (自动填充 - 异常类型)
MachineName (自动填充 - 当前服务器名称)
作用域 (自动填充 - 包含当前异常处理程序的作用域形状)
ServiceName (自动填充 - 业务流程名称)
ServiceInstanceID (自动填充 — 业务流程实例 ID 作为 GUID)
异常处理程序中的代码根据需要设置错误消息的其他属性,如以下代码示例所示。
// Set fault message properties. faultMsg.Body.FailureCategory = "MessageBuild"; faultMsg.Body.FaultCode = 1000; faultMsg.Body.FaultDescription = "Some error occurred"; faultMsg.Body.FaultSeverity = Microsoft.Practices.ESB.ExceptionHandling.FaultSeverity.Severe;
ESB 异常机制会自动将当前 Exception 对象序列化为错误消息。
(可选)异常处理程序中的代码可以使用 AddMessage (faultMsg, messageToAdd) 方法将当前业务流程消息添加到 ESB 错误消息。 此方法序列化并保留消息,包括所有上下文属性,如以下代码示例所示。
// Add other current orchestration messages to the fault message. Microsoft.Practices.ESB.ExceptionHandling.ExceptionMgmt.AddMessage( faultMsg, approvedRequestMsg); Microsoft.Practices.ESB.ExceptionHandling.ExceptionMgmt.AddMessage( faultMsg, DeniedRequestMsg, @"c:\temp");
异常处理程序中的代码使用直接绑定端口将 ESB 错误消息发布到 Message Box 数据库。
如果发布成功,则会发生以下事件:
业务流程或发送端口订阅可以处理 ESB 错误消息并提取任何添加的消息,并完成其上下文属性值。
(发送端口的全局异常处理程序) 会自动将 ESB 错误消息发布到 ESB 管理门户。