如何:使用不同的路径拆分数据交换并将生成的消息路由到多个文件位置

目标

本部分演示如何创建一个使用 ItinerarySelectReceiveXml 管道的 ESB on-ramp,并且如何配置管道的组件,以拆分入站交换,并根据消息上下文为每个生成的消息选择适当的路由单据。 路线选择将使用业务规则策略解决,并根据客户所在的区域以不同的方式路由消息。

在本指南中,你将完成以下步骤:

  • 创建一个 ESB 导入点,用于拆分 XML 数据交换。

  • 配置行程选择器管道组件以使用业务规则策略来选择适当的行程。

先决条件

本作指南主题中的过程需要完成 开发活动的先决条件

在您开始之前

请先完成下列任务,之后再执行本指南后面的步骤。

  • 创建所需的工件。

  • 将架构项目添加到 Patterns 解决方案。

  • 将构件添加到Schemas项目中。

  • 创建 BRE 策略,以使用自定义邮件属性选择行程。

  • 为客户 GlobalBank West 添加选择规则。

  • 为客户 GlobalBank East 添加选择规则。

  • 发布和部署策略。

  • 为 GlobalBank West 消息创建特定于域的 ESB 行程语言 (DSL) 模型。

  • 配置 GlobalBank West 行程的属性。

  • 定义 GlobalBank West 行程的结构。

  • 将 GlobalBank West 模型导出到行程数据库。

  • 为 GlobalBank East 消息创建 ESB 行程 DSL 模型。

  • 配置 GlobalBank East 行程属性。

  • 定义 GlobalBank East 行程的结构。

  • 将 GlobalBank East 模型导出到行程数据库。

    以下过程介绍如何执行所有操作。

创建所需的成果

  1. 在 Windows 资源管理器中,浏览到 C:\HowTos。

  2. 创建名为 OrderDocEnvelope.xsd 的新文本文档。

  3. 在记事本中打开 OrderDocEnvelope.xsd 架构。

  4. 使用以下代码编辑文档。

    <?xml version="1.0" ?>  
    <xs:schema xmlns:ns0="http://globalbank.esb.dynamicresolution.com/northamericanservices/" xmlns:b="http://schemas.microsoft.com/BizTalk/2003" xmlns="http://ESB.BizUnit.Map.Test" targetNamespace="http://ESB.BizUnit.Map.Test" xmlns:xs="http://www.w3.org/2001/XMLSchema">  
    
      <xs:import schemaLocation="GlobalBank.ESB.DynamicResolution.Schemas.NAOrderDoc" namespace="http://globalbank.esb.dynamicresolution.com/northamericanservices/" />  
      <xs:annotation>  
        <xs:appinfo>  
          <b:schemaInfo is_envelope="yes" xmlns:b="http://schemas.microsoft.com/BizTalk/2003" />  
          <b:references>  
            <b:reference targetNamespace="http://globalbank.esb.dynamicresolution.com/northamericanservices/" />  
          </b:references>  
        </xs:appinfo>  
      </xs:annotation>  
      <xs:element name="OrderEnvelope">  
        <xs:annotation>  
          <xs:appinfo>  
            <b:recordInfo body_xpath="/*[local-name()='OrderEnvelope' and namespace-uri()='http://ESB.BizUnit.Map.Test']" />  
          </xs:appinfo>  
        </xs:annotation>  
        <xs:complexType>  
          <xs:sequence>  
            <xs:element ref="ns0:OrderDoc" />  
          </xs:sequence>  
        </xs:complexType>  
      </xs:element>  
    </xs:schema>  
    
  5. 将 OrderDocEnvelope.xsd 另存为 UTF-8,然后关闭记事本。

  6. 在 C:\HowTos folder, create a new text document named Batch.xml中。

  7. 在记事本中,打开 Batch.xml。

  8. 使用以下代码编辑文档。

    <?xml version="1.0" ?>  
    <ns0:OrderEnvelope xmlns:ns0="http://ESB.BizUnit.Map.Test">  
      <ns0:OrderDoc xmlns:ns0="http://globalbank.esb.dynamicresolution.com/northamericanservices/">  
        <ns0:customerName>GlobalBankWest</ns0:customerName>  
        <ns0:ID>ns0:ID_0</ns0:ID>  
        <ns0:requestType>10</ns0:requestType>  
      </ns0:OrderDoc>  
      <ns0:OrderDoc xmlns:ns0="http://globalbank.esb.dynamicresolution.com/northamericanservices/">  
        <ns0:customerName>GlobalBankEast</ns0:customerName>  
        <ns0:ID>ns0:ID_0</ns0:ID>  
        <ns0:requestType>11</ns0:requestType>  
      </ns0:OrderDoc>  
      <ns0:OrderDoc xmlns:ns0="http://globalbank.esb.dynamicresolution.com/northamericanservices/">  
        <ns0:customerName>GlobalBankEast</ns0:customerName>  
        <ns0:ID>ns0:ID_0</ns0:ID>  
        <ns0:requestType>12</ns0:requestType>  
      </ns0:OrderDoc>  
    </ns0:OrderEnvelope>  
    
  9. 保存并关闭 Batch.xml。

将一个模式项目添加到Patterns解决方案中

  1. 在 Visual Studio 中,打开 C:\HowTos\Patterns\Patterns.sln。

  2. 在解决方案资源管理器中,右键单击 解决方案“模式”,指向 “添加”,然后单击“ 新建项目”。

  3. 在“ 添加新项目 ”对话框中的“项目类型”窗格中,单击 “BizTalk 项目”,然后执行以下作:

    1. 在“模板”窗格中,单击“ 空 BizTalk Server 项目”。

    2. “名称 ”框中,键入 Patterns.Schemas,然后单击“ 确定”。

  4. 在解决方案资源管理器中,右键单击 Patterns.Schemas,然后单击“ 属性”。

  5. 在“属性”窗口中的“ 签名 ”选项卡上,选中“ 对程序集进行签名 ”复选框。

  6. “选择强名称密钥文件 ”下拉列表中,单击“ <新建...”>

  7. 在“ 创建强名称密钥 ”对话框中,配置以下属性:

    1. “密钥文件名 ”框中,键入 “拆分”。

    2. 清除 “使用密码保护密钥文件 ”复选框,然后单击“ 确定”。

  8. 在“属性”窗口中的“ 部署 ”选项卡上的“ 应用程序名称 ”框中,键入 Microsoft.Practices.ESB

  9. 关闭“属性”窗口。

将工件添加到架构项目

  1. 在解决方案资源管理器中,右键单击 Patterns.Schemas,然后单击“ 添加引用”。

  2. 在“添加引用”对话框的“浏览”选项卡上,浏览到并选择 C:\Projects\Microsoft.Practices.ESB\Source\Samples\DynamicResolution\Source\ESB.DynamicResolution.Schemas\bin\Debug\GlobalBank.ESB.DynamicResolution.Schemas.dll,然后单击“确定”。

  3. 在解决方案资源管理器中,右键单击 Patterns.Schemas,指向 “添加”,然后单击“ 现有项”。

  4. “添加现有项 ”对话框中,浏览到 C:\HowTos\OrderDocEnvelope.xsd,然后单击“ 添加”。

  5. 保存所有解决方案产物。

  6. 在解决方案资源管理器中,右键单击 Patterns.Schemas,然后单击“ 部署”。

    注释

    本操作说明主题中使用的业务规则策略和行程与 如何:使用业务规则策略选择行程 主题中创建的相同。 如果尚未完成该部分,请完成以下附加步骤。 如果已完成该部分,请直接转到“步骤”部分。

创建业务规则引擎 (BRE) 策略,以使用自定义邮件属性选择行程

  1. 单击任务栏上的“ 开始 ”,指向 “所有程序”,指向 BizTalk Server,然后单击“ 业务规则编辑器”。

  2. 在策略资源管理器中,右键单击“ 策略”,然后单击“ 添加新策略”。 将策略 ResolveItineraryBasedOnCustomer 命名。

为客户 GlobalBank West 添加筛选规则

  1. ResolveItineraryBasedOnCustomer 策略中,右键单击 版本 1.0(未保存),然后单击“ 添加新规则”。 将规则 SetGlobalBankWestItinerary 命名。

  2. 在“事实资源管理器”中,单击 “XML 架构 ”选项卡,右键单击“ 架构”,然后单击“ 浏览”。

  3. “架构文件 ”对话框中,浏览到 C:\Projects\Microsoft.Practices.ESB\Source\Samples\DynamicResolution\Source\ESB。DynamicResolution.Schemas,选择 NAOrderDoc.xsd,然后单击“ 打开”。

    注释

    这是定义 NAOrderDoc.xml 消息的架构,它被用于创建您将用于测试的 West 和 East 消息。

  4. 在“事实资源管理器”中,单击 NAOrderDoc.xsd,在“属性”窗格中单击 “文档类型” 属性,然后键入 GlobalBank.ESB.DynamicResolution.Schemas.NAOrderDoc

    注释

    这是模式的完全限定名称。

  5. 在Facts浏览器中,展开 NAOrderDoc.xsd,然后展开 OrderDoc

  6. 在“规则”窗口中,右键单击 “条件”,指向 谓词,然后单击“ 等于”。

  7. 从事实资源管理器中,将 customerName 元素拖到条件下的 argument1 节点。

  8. 单击 参数 2 节点,然后键入 GlobalBankWest

  9. 在“事实浏览器”中,单击词汇选项卡。展开ESB.计划词汇,展开版本 1.1,然后将设置路线名称定义拖动到操作

  10. 单击 <空字符串> ,然后键入 GlobalBankWestItinerary

    注释

    在本指南的后面部分,您将创建此流程来处理来自 GlobalBank West 的消息。

为客户 GlobalBank East 添加选择规则

  1. 在策略资源管理器中,右键单击 SetGlobalBankWestItinerary 规则,然后单击“ 复制”。

  2. 右键单击 版本 1.0(未保存),然后单击“ 粘贴”。

  3. 在“ 新建规则名称 ”对话框中,键入 SetGlobalBankEastItinerary,然后单击“ 确定”。

  4. 在策略资源管理器中,单击 SetGlobalBankEastItinerary 规则。

  5. “条件 ”部分中,右键单击 GlobalBankWest,然后单击“ 重置”参数

  6. 单击 argument2,然后键入 GlobalBankEast

  7. “操作” 部分中,右键单击 GlobalBankWestItinerary,然后单击 “重置参数”

  8. 单击 <空字符串> ,然后键入 GlobalBankEastItinerary。

    注释

    在本指导专题的后面部分,你将创建此策略以处理 GlobalBank East 的消息。

发布和部署该策略

  1. 在策略资源管理器的 ResolveItineraryBasedOnCustomer 策略下,单击 版本 1.0(未保存),然后单击“ 发布”。

  2. 在策略资源管理器的 ResolveItineraryBasedOnCustomer 策略下,单击 版本 1.0 - 已发布,然后单击“ 部署”。

为 GlobalBank West 消息创建 ESB 行程 DSL 模型

  1. Visual Studio 中,打开 C:\HowTos\Patterns\Patterns.sln。

  2. 在解决方案资源管理器中,右键单击 “行程库 ”项目,指向 “添加”,然后单击“ 新建路线”。

  3. 在“ 添加新项 ”对话框中的“模板”窗格中,单击“ 行程Dsl”。

  4. “名称 ”框中,键入 GlobalBankWestItinerary,然后单击“ 添加”。

配置 GlobalBank West 的行程属性

  1. 在 Visual Studio 中,单击 GlobalBankWestItinerary.行程的设计视图。 在 GlobalBankWestItinerary 属性窗口中,配置以下属性:

    1. “模型导出程序 ”下拉列表中,单击 “数据库行程导出程序”。

    2. 单击 “行程数据库 ”属性旁边的省略号按钮(...)。

    3. 在“ 连接属性 ”对话框中,选择承载行程存储库数据库的 SQL Server,然后指定数据库的名称(默认名称为 EsbItineraryDb)。

  2. 在“行程状态”下拉列表中,单击“已部署”。

    注释

    此步骤使你可以将行程导出到中央存储库;收到消息时,可以从此存储库中选择并附加路线。 稍后将路线选择器管道组件配置为使用 BRI 解析程序评估入站消息,并从此存储库中选择适当的行程。

定义GlobalBank West的行程结构

  1. 从工具箱中,将 On-Ramp 模型元素拖到设计图面。 在 OnRamp1 “属性”窗口中,配置以下属性:

    1. 单击 Name 属性,然后键入 ReceiveNAOrder

    2. “扩展程序 ”下拉列表中,单击“ On-Ramp ESB 服务扩展”。

    3. BizTalk 应用程序 下拉列表中,单击 Microsoft.Practices.ESB

    4. 接收端口下拉列表中,单击OnRamp.Itinerary

  2. 从工具箱中,将 Off-Ramp 模型元素拖到设计图面,然后将其置于 ReceiveNAOrder 模型元素右侧。 在 OffRamp1 “属性”窗口中,配置以下属性:

    1. 单击 Name 属性,然后键入 SendNAOrder

    2. “扩展程序 ”下拉列表中,单击 Off-Ramp ESB 服务扩展

    3. BizTalk 应用程序 下拉列表中,单击 GlobalBank.ESB

    4. “发送端口 ”下拉列表中,单击 DynamicResolutionOneWay

  3. 从工具箱中,将“路线服务”模型元素拖到设计图面,然后将其放在 ReceiveNAOrder 模型元素和 SendNAOrder 模型元素之间。“ItineraryService1 属性”窗口中,配置以下属性:

    1. 单击 Name 属性,然后键入 RouteMessage

    2. “行程服务扩展程序 ”下拉列表中,单击 “行程服务扩展”Off-Ramp

    3. Off-Ramp 下拉列表中,展开 SendNAOrder,然后单击 发送处理程序

  4. 右键单击 RouteMessage 模型元素的 Resolver 集合,然后单击“添加新冲突解决程序”。 在 Resolver1 “属性”窗口中,配置以下属性:

    1. 单击 Name 属性,然后键入 StaticResolver

    2. “解析程序实现 ”下拉列表中,单击 “静态解析程序扩展”。

    3. “传输名称 ”下拉列表中,单击“ 文件”。

    4. 单击 “传输位置” 属性,然后键入 C:\HowTos\Out\West%MessageID%.xml

  5. 在工具箱中,单击“ 连接器”。 将 ReceiveNAOrder 模型元素的连接拖动到 RouteMessage 模型元素。

  6. 在工具箱中,单击“ 连接器”。 从 RouteMessage 模型元素将连接拖到 SendNAOrder 模型元素。

将 GlobalBank West 模型导出到行程数据库

  1. 在 Visual Studio 中,右键单击 GlobalBankWestItinerary 行程的设计图面,然后单击“ 导出模型”。

    注释

    行程已导出到行程数据库,现在可以由行程选择器组件使用。

  2. 保存所有项目工件。

为 GlobalBank East 消息创建 ESB 路由 DSL 模型

  1. Visual Studio 中,打开 C:\HowTos\Patterns.sln。

  2. 在解决方案资源管理器中,右键单击 “行程库 ”项目,指向 “添加”,然后单击“ 新建路线”。

  3. 在“ 添加新项 ”对话框中的“模板”窗格中,单击“ 行程Dsl”。

  4. “名称 ”框中,键入 GlobalBankEastItinerary,然后单击“ 添加”。

配置 GlobalBank East 行程的属性

  1. 在 Visual Studio 中,单击 GlobalBankEastItinerary.itinerary的设计视图。 在 GlobalBankEastItinerary 属性窗口中,配置以下属性:

    1. “模型导出程序 ”下拉列表中,单击 “数据库行程导出程序”。

    2. 单击 “行程数据库 ”属性旁边的省略号按钮(...)。

    3. 在“ 连接属性 ”对话框中,选择承载行程存储库数据库的 SQL Server,然后指定数据库的名称(默认名称为 EsbItineraryDb)。

  2. 在“行程状态”下拉列表中,单击“已部署”。

    注释

    此步骤使你可以将行程导出到中央存储库;收到消息时,可以从此存储库中选择并附加路线。 稍后将路线选择器管道组件配置为使用 BRI 解析程序评估入站消息,并从此存储库中选择适当的行程。

定义 GlobalBank East 行程的结构

  1. 从工具箱中,将 On-Ramp 模型元素拖到设计图面。 在 OnRamp1 “属性”窗口中,配置以下属性:

    1. 单击 Name 属性,然后键入 ReceiveNAOrder

    2. “扩展程序 ”下拉列表中,单击“ On-Ramp ESB 服务扩展”。

    3. BizTalk 应用程序 下拉列表中,单击 Microsoft.Practices.ESB

    4. 接收端口下拉列表中,单击OnRamp.Itinerary

  2. 从工具箱中,将 Off-Ramp 模型元素拖到设计图面,然后将其置于 ReceiveNAOrder 模型元素右侧。 在 OffRamp1 “属性”窗口中,配置以下属性:

    1. 单击 Name 属性,然后键入 SendNAOrder

    2. “扩展程序 ”下拉列表中,单击 Off-Ramp ESB 服务扩展

    3. BizTalk 应用程序 下拉列表中,单击 GlobalBank.ESB

    4. “发送端口 ”下拉列表中,单击 DynamicResolutionOneWay

  3. 从工具箱中,将“路线服务”模型元素拖到设计图面,然后将其放在 ReceiveNAOrder 模型元素和 SendNAOrder 模型元素之间。“ItineraryService1 属性”窗口中,配置以下属性:

    1. 单击 Name 属性,然后键入 RouteMessage

    2. “行程服务扩展程序 ”下拉列表中,单击 “行程服务扩展”Off-Ramp

    3. Off-Ramp 下拉列表中,展开 SendNAOrder,然后单击 发送处理程序

  4. 右键单击 RouteMessage 模型元素的 Resolver 集合,然后单击“添加新冲突解决程序”。 在 Resolver1 “属性”窗口中,配置以下属性:

    1. 单击 Name 属性,然后键入 StaticResolver

    2. “解析程序实现 ”下拉列表中,单击 “静态解析程序扩展”。

    3. “传输名称 ”下拉列表中,单击“ 文件”。

    4. 单击 “传输位置” 属性,然后键入 C:\HowTos\Out\East%MessageID%.xml

  5. 在工具箱中,单击“ 连接器”。 从ReceiveNAOrder模型元素拖动连接到RouteMessage模型元素。

  6. 在工具箱中,单击“ 连接器”。 将连接从RouteMessage模型元素拖动到SendNAOrder模型元素。

将 GlobalBank East 模型导出到行程数据库

  1. 在 Visual Studio 中,右键单击 GlobalBankEastItinerary 行程的设计图面,然后单击“ 导出模型”。

    注释

    行程已导出到行程数据库,现在可以由行程选择器组件使用。

  2. 保存所有项目工件。

步骤

创建和配置 ESB 入门配置

  1. 单击任务栏上的“ 开始 ”,指向 “所有程序”,指向 BizTalk Server,然后单击“ BizTalk Server 管理”。

  2. 在 BizTalk Server 管理控制台中,展开 BizTalk 组应用程序,然后展开 Microsoft.Practices.ESB

  3. 右键单击 “接收位置”,指向“ 新建”,然后单击 “单向接收位置”。

  4. “选择接收端口 ”对话框中,单击“ OnRamp.行程”,然后单击“ 确定”。

  5. “接收位置属性 ”对话框中的“ 名称 ”框中,键入 OnRamp.Itinerary.HowTo

  6. “类型 ”下拉列表中,单击“ 文件”, 然后单击“ 配置”。

  7. “文件传输属性 ”对话框中的 “接收”文件夹 框中键入 C:\HowTos\DropFolder,然后单击“ 确定”。

配置路线选择器管道组件

  1. 在“接收位置属性”对话框中,单击“接收管道”下拉列表中的ItinerarySelectReceiveXml,然后单击省略号按钮(...)。

  2. 使用“ 配置管道 ”对话框配置以下 路线选择器 组件属性:

    1. 单击 “ItineraryFactKey ”属性,然后键入 Resolver.Itinerary

    2. 单击 ResolverConnectionString 属性,然后键入 BRI:\\policy=ResolveItineraryBasedOnCustomer;useMsg=true;recognizeMessageFormat=true;

    3. 单击“ 确定 ”关闭“ 配置管道 ”对话框。

      注释

      由于此接收位置正在拆解 XML 互交换数据,因此不需要 XML 拆解组件配置。

  3. 单击“ 确定 ”关闭“ 接收位置属性 ”对话框。

  4. 在 BizTalk Server 管理控制台中,右键单击 OnRamp.Itinerary.HowTo 接收位置,然后单击“ 启用”。

测试行程选择器和商业规则

  1. 在 Windows 资源管理器中,浏览到 C:\HowTos。

  2. 复制(请勿移动)Batch.xml 到 DropFolder 文件夹。

  3. 浏览到目录,C:\HowTos\Out. Verify that one West%MessageID%.xml message and two East%MessageID%.xml 消息已被写入。

    注释

    尽管消息除了客户元素的值之外是相同的,但根据行程选择器管道组件的解析,它们采用不同的行程进行了处理。

  4. 在 BizTalk Server 管理控制台中,右键单击 OnRamp.Itinerary.HowTo 接收位置,然后单击“禁用”。

  5. 禁用 OnRamp.Itinerary.HowTo 接收位置后,右键单击该位置,然后单击“删除”。 在“ 确认删除接收位置 ”对话框中,单击“ ”。

其他资源

有关详细信息,请参阅下列相关主题: