使用 BizTalk 业务流程创建自定义路线服务

属于 Microsoft BizTalk ESB 工具包的“行程框架”支持使用业务流程来执行行程中的各个步骤。 可以根据功能要求将自定义路线服务实现为Microsoft BizTalk Server 业务流程,其中包括:

  • 多个服务调用(如 安装和运行 Scatter-Gather 示例所示)

  • 协议中介和消息关联(例如,HTTP-MQSeries)

  • 基于来自外部数据源的消息扩充的复杂路由决策

  • 业务处理逻辑

    使用 BizTalk Server 业务流程实现的每个行程服务都负责以下事项:

  • 使用支持重新提交(单向行程)的 ESB 异常处理框架或可选的自定义异常处理程序处理异常和错误

  • 通过 BizTalk Server 推进行程并发布出站消息,以便下一个行程服务步骤可以执行

使用 BizTalk Server 协调创建自定义行程服务

  1. 创建新的 BizTalk Server 项目,其中包含新的业务流程;例如 MyCustomeItineraryService.odx。

  2. 添加对以下程序集的引用:

    • Microsoft.Practices.ESB.行程

    • Microsoft.Practices.ESB.行程.方案

    • Microsoft.Practices.ESB.ExceptionHandling

    • Microsoft.Practices.ESB.ExceptionHandling.Faults

  3. 在业务流程中定义逻辑直接绑定的接收端口和已激活的接收形状。

  4. 定义订阅筛选器以从消息路线上下文激活业务流程,以便业务流程执行 MyCustomItineraryService 步骤。 下面的代码演示了合适的筛选器示例。

    (Microsoft.Practices.ESB.Itinerary.Schemas.ServiceName   
        == "MyCustomItineraryService")   
    && (Microsoft.Practices.ESB.Itinerary.Schemas.ServiceState == "Pending")  
    && (Microsoft.Practices.ESB.Itinerary.Schemas.ServiceType   
        == "Orchestration")  
    
  5. 定义类型为 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);  
    
    
  6. 将自定义实现添加到为下一个流程步骤创建出站消息的流程,例如“OutboundMsg”。

  7. 使用以下表达式操作推进行程的进度,该操作利用入站消息的上下文信息。

    OutboundMessage(*) = InboundMessage(*);   
    itinerary.Itinerary.Advance(OutboundMessage, itineraryStep.ItineraryStep);  
    
  8. 通过直接绑定的发送端口发送更新行程的出站消息,以便激活下一个行程服务。

    有关使用 BizTalk Server 业务流程实现自定义行程服务的详细信息,请参阅 “安装和运行路线引导示例” 以及 安装和运行 Scatter-Gather 示例