属于 Microsoft BizTalk ESB 工具包的“行程框架”支持使用业务流程来执行行程中的各个步骤。 可以根据功能要求将自定义路线服务实现为Microsoft BizTalk Server 业务流程,其中包括:
多个服务调用(如 安装和运行 Scatter-Gather 示例所示)
协议中介和消息关联(例如,HTTP-MQSeries)
基于来自外部数据源的消息扩充的复杂路由决策
业务处理逻辑
使用 BizTalk Server 业务流程实现的每个行程服务都负责以下事项:
使用支持重新提交(单向行程)的 ESB 异常处理框架或可选的自定义异常处理程序处理异常和错误
通过 BizTalk Server 推进行程并发布出站消息,以便下一个行程服务步骤可以执行
使用 BizTalk Server 协调创建自定义行程服务
创建新的 BizTalk Server 项目,其中包含新的业务流程;例如 MyCustomeItineraryService.odx。
添加对以下程序集的引用:
Microsoft.Practices.ESB.行程
Microsoft.Practices.ESB.行程.方案
Microsoft.Practices.ESB.ExceptionHandling
Microsoft.Practices.ESB.ExceptionHandling.Faults
在业务流程中定义逻辑直接绑定的接收端口和已激活的接收形状。
定义订阅筛选器以从消息路线上下文激活业务流程,以便业务流程执行 MyCustomItineraryService 步骤。 下面的代码演示了合适的筛选器示例。
(Microsoft.Practices.ESB.Itinerary.Schemas.ServiceName == "MyCustomItineraryService") && (Microsoft.Practices.ESB.Itinerary.Schemas.ServiceState == "Pending") && (Microsoft.Practices.ESB.Itinerary.Schemas.ServiceType == "Orchestration")
定义类型为 Microsoft.Practices.ESB.Itinerary.ItineraryStep 的编排。 在编排中添加一个表达式活动,为此变量赋值,如以下代码所示。
// Retrieve the current itinerary step. itinerary = new Microsoft.Practices.ESB.Itinerary.SerializableItineraryWrapper(); step = new Microsoft.Practices.ESB.Itinerary.SerializableItineraryStepWrapper(); itinerary.Itinerary = Microsoft.Practices.ESB.Itinerary.ItineraryOMFactory.Create(InboundMessage); step.ItineraryStep = itinerary.Itinerary.GetItineraryStep(InboundMessage);
将自定义实现添加到为下一个流程步骤创建出站消息的流程,例如“OutboundMsg”。
使用以下表达式操作推进行程的进度,该操作利用入站消息的上下文信息。
OutboundMessage(*) = InboundMessage(*); itinerary.Itinerary.Advance(OutboundMessage, itineraryStep.ItineraryStep);
通过直接绑定的发送端口发送更新行程的出站消息,以便激活下一个行程服务。
有关使用 BizTalk Server 业务流程实现自定义行程服务的详细信息,请参阅 “安装和运行路线引导示例” 以及 安装和运行 Scatter-Gather 示例。