目标
本部分演示如何创建一个使用 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 模型导出到行程数据库。
以下过程介绍如何执行所有操作。
创建所需的成果
在 Windows 资源管理器中,浏览到 C:\HowTos。
创建名为 OrderDocEnvelope.xsd 的新文本文档。
在记事本中打开 OrderDocEnvelope.xsd 架构。
使用以下代码编辑文档。
<?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>
将 OrderDocEnvelope.xsd 另存为 UTF-8,然后关闭记事本。
在 C:\HowTos folder, create a new text document named Batch.xml中。
在记事本中,打开 Batch.xml。
使用以下代码编辑文档。
<?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>
保存并关闭 Batch.xml。
将一个模式项目添加到Patterns解决方案中
在 Visual Studio 中,打开 C:\HowTos\Patterns\Patterns.sln。
在解决方案资源管理器中,右键单击 解决方案“模式”,指向 “添加”,然后单击“ 新建项目”。
在“ 添加新项目 ”对话框中的“项目类型”窗格中,单击 “BizTalk 项目”,然后执行以下作:
在“模板”窗格中,单击“ 空 BizTalk Server 项目”。
在 “名称 ”框中,键入 Patterns.Schemas,然后单击“ 确定”。
在解决方案资源管理器中,右键单击 Patterns.Schemas,然后单击“ 属性”。
在“属性”窗口中的“ 签名 ”选项卡上,选中“ 对程序集进行签名 ”复选框。
在 “选择强名称密钥文件 ”下拉列表中,单击“ <新建...”>。
在“ 创建强名称密钥 ”对话框中,配置以下属性:
在 “密钥文件名 ”框中,键入 “拆分”。
清除 “使用密码保护密钥文件 ”复选框,然后单击“ 确定”。
在“属性”窗口中的“ 部署 ”选项卡上的“ 应用程序名称 ”框中,键入 Microsoft.Practices.ESB。
关闭“属性”窗口。
将工件添加到架构项目
在解决方案资源管理器中,右键单击 Patterns.Schemas,然后单击“ 添加引用”。
在“添加引用”对话框的“浏览”选项卡上,浏览到并选择 C:\Projects\Microsoft.Practices.ESB\Source\Samples\DynamicResolution\Source\ESB.DynamicResolution.Schemas\bin\Debug\GlobalBank.ESB.DynamicResolution.Schemas.dll,然后单击“确定”。
在解决方案资源管理器中,右键单击 Patterns.Schemas,指向 “添加”,然后单击“ 现有项”。
在 “添加现有项 ”对话框中,浏览到 C:\HowTos\OrderDocEnvelope.xsd,然后单击“ 添加”。
保存所有解决方案产物。
在解决方案资源管理器中,右键单击 Patterns.Schemas,然后单击“ 部署”。
注释
本操作说明主题中使用的业务规则策略和行程与 如何:使用业务规则策略选择行程 主题中创建的相同。 如果尚未完成该部分,请完成以下附加步骤。 如果已完成该部分,请直接转到“步骤”部分。
创建业务规则引擎 (BRE) 策略,以使用自定义邮件属性选择行程
单击任务栏上的“ 开始 ”,指向 “所有程序”,指向 BizTalk Server,然后单击“ 业务规则编辑器”。
在策略资源管理器中,右键单击“ 策略”,然后单击“ 添加新策略”。 将策略 ResolveItineraryBasedOnCustomer 命名。
为客户 GlobalBank West 添加筛选规则
在 ResolveItineraryBasedOnCustomer 策略中,右键单击 版本 1.0(未保存),然后单击“ 添加新规则”。 将规则 SetGlobalBankWestItinerary 命名。
在“事实资源管理器”中,单击 “XML 架构 ”选项卡,右键单击“ 架构”,然后单击“ 浏览”。
在 “架构文件 ”对话框中,浏览到 C:\Projects\Microsoft.Practices.ESB\Source\Samples\DynamicResolution\Source\ESB。DynamicResolution.Schemas,选择 NAOrderDoc.xsd,然后单击“ 打开”。
注释
这是定义 NAOrderDoc.xml 消息的架构,它被用于创建您将用于测试的 West 和 East 消息。
在“事实资源管理器”中,单击 NAOrderDoc.xsd,在“属性”窗格中单击 “文档类型” 属性,然后键入 GlobalBank.ESB.DynamicResolution.Schemas.NAOrderDoc。
注释
这是模式的完全限定名称。
在Facts浏览器中,展开 NAOrderDoc.xsd,然后展开 OrderDoc。
在“规则”窗口中,右键单击 “条件”,指向 谓词,然后单击“ 等于”。
从事实资源管理器中,将 customerName 元素拖到条件下的 argument1 节点。
单击 参数 2 节点,然后键入 GlobalBankWest。
在“事实浏览器”中,单击词汇选项卡。展开ESB.计划词汇,展开版本 1.1,然后将设置路线名称定义拖动到操作。
单击 <空字符串> ,然后键入 GlobalBankWestItinerary。
注释
在本指南的后面部分,您将创建此流程来处理来自 GlobalBank West 的消息。
为客户 GlobalBank East 添加选择规则
在策略资源管理器中,右键单击 SetGlobalBankWestItinerary 规则,然后单击“ 复制”。
右键单击 版本 1.0(未保存),然后单击“ 粘贴”。
在“ 新建规则名称 ”对话框中,键入 SetGlobalBankEastItinerary,然后单击“ 确定”。
在策略资源管理器中,单击 SetGlobalBankEastItinerary 规则。
在 “条件 ”部分中,右键单击 GlobalBankWest,然后单击“ 重置”参数。
单击 argument2,然后键入 GlobalBankEast。
在 “操作” 部分中,右键单击 GlobalBankWestItinerary,然后单击 “重置参数”。
单击 <空字符串> ,然后键入 GlobalBankEastItinerary。
注释
在本指导专题的后面部分,你将创建此策略以处理 GlobalBank East 的消息。
发布和部署该策略
在策略资源管理器的 ResolveItineraryBasedOnCustomer 策略下,单击 版本 1.0(未保存),然后单击“ 发布”。
在策略资源管理器的 ResolveItineraryBasedOnCustomer 策略下,单击 版本 1.0 - 已发布,然后单击“ 部署”。
为 GlobalBank West 消息创建 ESB 行程 DSL 模型
在 Visual Studio 中,打开 C:\HowTos\Patterns\Patterns.sln。
在解决方案资源管理器中,右键单击 “行程库 ”项目,指向 “添加”,然后单击“ 新建路线”。
在“ 添加新项 ”对话框中的“模板”窗格中,单击“ 行程Dsl”。
在 “名称 ”框中,键入 GlobalBankWestItinerary,然后单击“ 添加”。
配置 GlobalBank West 的行程属性
在 Visual Studio 中,单击 GlobalBankWestItinerary.行程的设计视图。 在 GlobalBankWestItinerary 属性窗口中,配置以下属性:
在 “模型导出程序 ”下拉列表中,单击 “数据库行程导出程序”。
单击 “行程数据库 ”属性旁边的省略号按钮(...)。
在“ 连接属性 ”对话框中,选择承载行程存储库数据库的 SQL Server,然后指定数据库的名称(默认名称为 EsbItineraryDb)。
在“行程状态”下拉列表中,单击“已部署”。
注释
此步骤使你可以将行程导出到中央存储库;收到消息时,可以从此存储库中选择并附加路线。 稍后将路线选择器管道组件配置为使用 BRI 解析程序评估入站消息,并从此存储库中选择适当的行程。
定义GlobalBank West的行程结构
从工具箱中,将 On-Ramp 模型元素拖到设计图面。 在 OnRamp1 “属性”窗口中,配置以下属性:
单击 Name 属性,然后键入 ReceiveNAOrder。
在 “扩展程序 ”下拉列表中,单击“ On-Ramp ESB 服务扩展”。
在 BizTalk 应用程序 下拉列表中,单击 Microsoft.Practices.ESB。
在接收端口下拉列表中,单击OnRamp.Itinerary。
从工具箱中,将 Off-Ramp 模型元素拖到设计图面,然后将其置于 ReceiveNAOrder 模型元素右侧。 在 OffRamp1 “属性”窗口中,配置以下属性:
单击 Name 属性,然后键入 SendNAOrder。
在 “扩展程序 ”下拉列表中,单击 Off-Ramp ESB 服务扩展。
在 BizTalk 应用程序 下拉列表中,单击 GlobalBank.ESB。
在 “发送端口 ”下拉列表中,单击 DynamicResolutionOneWay。
从工具箱中,将“路线服务”模型元素拖到设计图面,然后将其放在 ReceiveNAOrder 模型元素和 SendNAOrder 模型元素之间。 在 “ItineraryService1 属性”窗口中,配置以下属性:
单击 Name 属性,然后键入 RouteMessage。
在 “行程服务扩展程序 ”下拉列表中,单击 “行程服务扩展”Off-Ramp。
在 Off-Ramp 下拉列表中,展开 SendNAOrder,然后单击 发送处理程序。
右键单击 RouteMessage 模型元素的 Resolver 集合,然后单击“添加新冲突解决程序”。 在 Resolver1 “属性”窗口中,配置以下属性:
单击 Name 属性,然后键入 StaticResolver。
在 “解析程序实现 ”下拉列表中,单击 “静态解析程序扩展”。
在 “传输名称 ”下拉列表中,单击“ 文件”。
单击 “传输位置” 属性,然后键入 C:\HowTos\Out\West%MessageID%.xml。
在工具箱中,单击“ 连接器”。 将 ReceiveNAOrder 模型元素的连接拖动到 RouteMessage 模型元素。
在工具箱中,单击“ 连接器”。 从 RouteMessage 模型元素将连接拖到 SendNAOrder 模型元素。
将 GlobalBank West 模型导出到行程数据库
在 Visual Studio 中,右键单击 GlobalBankWestItinerary 行程的设计图面,然后单击“ 导出模型”。
注释
行程已导出到行程数据库,现在可以由行程选择器组件使用。
保存所有项目工件。
为 GlobalBank East 消息创建 ESB 路由 DSL 模型
在 Visual Studio 中,打开 C:\HowTos\Patterns.sln。
在解决方案资源管理器中,右键单击 “行程库 ”项目,指向 “添加”,然后单击“ 新建路线”。
在“ 添加新项 ”对话框中的“模板”窗格中,单击“ 行程Dsl”。
在 “名称 ”框中,键入 GlobalBankEastItinerary,然后单击“ 添加”。
配置 GlobalBank East 行程的属性
在 Visual Studio 中,单击 GlobalBankEastItinerary.itinerary的设计视图。 在 GlobalBankEastItinerary 属性窗口中,配置以下属性:
在 “模型导出程序 ”下拉列表中,单击 “数据库行程导出程序”。
单击 “行程数据库 ”属性旁边的省略号按钮(...)。
在“ 连接属性 ”对话框中,选择承载行程存储库数据库的 SQL Server,然后指定数据库的名称(默认名称为 EsbItineraryDb)。
在“行程状态”下拉列表中,单击“已部署”。
注释
此步骤使你可以将行程导出到中央存储库;收到消息时,可以从此存储库中选择并附加路线。 稍后将路线选择器管道组件配置为使用 BRI 解析程序评估入站消息,并从此存储库中选择适当的行程。
定义 GlobalBank East 行程的结构
从工具箱中,将 On-Ramp 模型元素拖到设计图面。 在 OnRamp1 “属性”窗口中,配置以下属性:
单击 Name 属性,然后键入 ReceiveNAOrder。
在 “扩展程序 ”下拉列表中,单击“ On-Ramp ESB 服务扩展”。
在 BizTalk 应用程序 下拉列表中,单击 Microsoft.Practices.ESB。
在接收端口下拉列表中,单击OnRamp.Itinerary。
从工具箱中,将 Off-Ramp 模型元素拖到设计图面,然后将其置于 ReceiveNAOrder 模型元素右侧。 在 OffRamp1 “属性”窗口中,配置以下属性:
单击 Name 属性,然后键入 SendNAOrder。
在 “扩展程序 ”下拉列表中,单击 Off-Ramp ESB 服务扩展。
在 BizTalk 应用程序 下拉列表中,单击 GlobalBank.ESB。
在 “发送端口 ”下拉列表中,单击 DynamicResolutionOneWay。
从工具箱中,将“路线服务”模型元素拖到设计图面,然后将其放在 ReceiveNAOrder 模型元素和 SendNAOrder 模型元素之间。 在 “ItineraryService1 属性”窗口中,配置以下属性:
单击 Name 属性,然后键入 RouteMessage。
在 “行程服务扩展程序 ”下拉列表中,单击 “行程服务扩展”Off-Ramp。
在 Off-Ramp 下拉列表中,展开 SendNAOrder,然后单击 发送处理程序。
右键单击 RouteMessage 模型元素的 Resolver 集合,然后单击“添加新冲突解决程序”。 在 Resolver1 “属性”窗口中,配置以下属性:
单击 Name 属性,然后键入 StaticResolver。
在 “解析程序实现 ”下拉列表中,单击 “静态解析程序扩展”。
在 “传输名称 ”下拉列表中,单击“ 文件”。
单击 “传输位置” 属性,然后键入 C:\HowTos\Out\East%MessageID%.xml。
在工具箱中,单击“ 连接器”。 从ReceiveNAOrder模型元素拖动连接到RouteMessage模型元素。
在工具箱中,单击“ 连接器”。 将连接从RouteMessage模型元素拖动到SendNAOrder模型元素。
将 GlobalBank East 模型导出到行程数据库
在 Visual Studio 中,右键单击 GlobalBankEastItinerary 行程的设计图面,然后单击“ 导出模型”。
注释
行程已导出到行程数据库,现在可以由行程选择器组件使用。
保存所有项目工件。
步骤
创建和配置 ESB 入门配置
单击任务栏上的“ 开始 ”,指向 “所有程序”,指向 BizTalk Server,然后单击“ BizTalk Server 管理”。
在 BizTalk Server 管理控制台中,展开 BizTalk 组、 应用程序,然后展开 Microsoft.Practices.ESB。
右键单击 “接收位置”,指向“ 新建”,然后单击 “单向接收位置”。
在 “选择接收端口 ”对话框中,单击“ OnRamp.行程”,然后单击“ 确定”。
在 “接收位置属性 ”对话框中的“ 名称 ”框中,键入 OnRamp.Itinerary.HowTo。
在 “类型 ”下拉列表中,单击“ 文件”, 然后单击“ 配置”。
在 “文件传输属性 ”对话框中的 “接收”文件夹 框中键入 C:\HowTos\DropFolder,然后单击“ 确定”。
配置路线选择器管道组件
在“接收位置属性”对话框中,单击“接收管道”下拉列表中的ItinerarySelectReceiveXml,然后单击省略号按钮(...)。
使用“ 配置管道 ”对话框配置以下 路线选择器 组件属性:
单击 “ItineraryFactKey ”属性,然后键入 Resolver.Itinerary。
单击 ResolverConnectionString 属性,然后键入 BRI:\\policy=ResolveItineraryBasedOnCustomer;useMsg=true;recognizeMessageFormat=true;
单击“ 确定 ”关闭“ 配置管道 ”对话框。
注释
由于此接收位置正在拆解 XML 互交换数据,因此不需要 XML 拆解组件配置。
单击“ 确定 ”关闭“ 接收位置属性 ”对话框。
在 BizTalk Server 管理控制台中,右键单击 OnRamp.Itinerary.HowTo 接收位置,然后单击“ 启用”。
测试行程选择器和商业规则
在 Windows 资源管理器中,浏览到 C:\HowTos。
复制(请勿移动)Batch.xml 到 DropFolder 文件夹。
浏览到目录,C:\HowTos\Out. Verify that one West%MessageID%.xml message and two East%MessageID%.xml 消息已被写入。
注释
尽管消息除了客户元素的值之外是相同的,但根据行程选择器管道组件的解析,它们采用不同的行程进行了处理。
在 BizTalk Server 管理控制台中,右键单击 OnRamp.Itinerary.HowTo 接收位置,然后单击“禁用”。
禁用 OnRamp.Itinerary.HowTo 接收位置后,右键单击该位置,然后单击“删除”。 在“ 确认删除接收位置 ”对话框中,单击“ 是”。
其他资源
有关详细信息,请参阅下列相关主题: