如何:使用消息上下文属性实现基于内容的路由

目标

本部分演示如何使用 Microsoft BizTalk ESB 工具包路线设计器创建基于消息上下文属性选择邮件收件人的行程,然后使用“行程代理”消息服务将邮件路由到该收件人。

在本主题中,你将完成以下步骤:

  • 使用行程代理和具有静态解析程序的两个路由服务创建行程。

  • 使用“行程测试客户端”示例应用程序测试行程。

注释

当前实现中未提供基于编排的代理服务。

先决条件

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

步骤

创建 ESB 路线 DSL 模型

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

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

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

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

配置行程的属性

  1. 在 Visual Studio 中,单击 ChoiceRouter 行程的设计界面。 在 “ChoiceRouter 属性”窗口中,配置以下属性:

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

    2. “扩展程序设置” 部分中,单击 “行程 XML 文件 ”属性旁边的省略号按钮(...)。

    3. “导出模式 ”属性下拉列表中,单击“ 严格”。

    4. “选择 XML 文件”对话框中,在“文件名”框中键入 C:\HowTos\Itineraries\ChoiceRouter,然后单击“保存”。

    注释

    此步骤使你可以将行程导出为 XML 到本地文件位置。 通过将行程导出到本地文件位置(而不是行程数据库),可以使用 ESB 测试客户端应用程序测试行程。 稍后将完成本作说明主题中的此过程。

定义行程的结构

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

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

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

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

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

  2. 从工具箱中,将 行程代理服务 模型元素拖到设计器图面,然后将其置于 On-Ramp 模型元素的右侧。 在 ItineraryBrokerService1 中,配置以下属性:

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

    2. “扩展程序 ”下拉列表中,单击“ 消息代理扩展程序”。

    3. “容器”下拉列表中,展开ReceiveNAOrder,然后单击“接收处理程序”

    4. “服务名称 ”下拉列表中,单击 Microsoft.Practices.ESB.Itinerary.Services.Broker.MessagingBroker

  3. 右键单击 筛选器 集合,然后单击“ 添加新筛选器”。 在 “Filter1 属性”窗口中,配置以下属性:

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

    2. 单击 “筛选器 实现”下拉列表,然后单击 “XPath 筛选器”。

    3. 单击 表达式 属性,然后键入 count(/ContextProperties/Property[@name='InboundTransportLocation'][contains(., 'ProcessItinerary.asmx')]] > 0

  4. 右键单击 筛选器 集合,然后单击“ 添加新筛选器”。 在 “Filter1 属性”窗口中,配置以下属性:

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

    2. 单击 “筛选器实现 ”下拉列表,然后单击 “XPath 筛选器”。

    3. 单击 表达式 属性,然后键入 count(/ContextProperties/Property[@name='InboundTransportLocation'][contains(., 'ESB.ItineraryServices.WCF')]) > 0.

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

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

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

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

  7. 从工具箱中,将 路线服务 模型元素拖到设计图面,然后将其置于 RouteBrokerService 模型元素下。 在 “ItineraryService1 属性”窗口中,配置以下属性:

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

    2. “行程服务扩展程序 ”下拉列表中,单击“ 消息传递扩展程序”。

      注释

      此属性定义进程将在管道(消息传送)中发生。 或者,如果进程将在业务流程中进行,请将 行程服务扩展程序 属性设置为 业务流程扩展程序

    3. “容器”下拉列表中,展开ReceiveNAOrder,然后单击“接收处理程序”

    4. “服务名称 ”下拉列表中,单击 Microsoft.Practices.ESB.Services.Routing

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

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

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

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

    4. 单击 传输位置 属性,然后键入 c:\howtos\out\asmx%MessageId%.xml

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

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

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

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

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

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

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

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

    3. Off-Ramp 下拉列表中,展开 SendASMXOrder,然后单击 Send Handlers

  11. 在工具箱中,单击“ 连接器”。 请将 RouteToFileFromASMX 模型元素的连接拖到 SendPortFilterASMX 模型元素。

  12. 在工具箱中,单击“ 连接器”。 将连接从 SendPortFilterASMX 模型元素拖到 SendASMXOrder 模型元素。

  13. 从工具箱中,将 路线服务 模型元素拖到设计图面,然后将其置于 RouteBrokerService 模型元素的右侧。 在 “ItineraryService1 属性”窗口中,配置以下属性:

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

    2. “行程服务扩展程序 ”下拉列表中,单击“ 消息传递扩展程序”。

      注释

      此属性定义进程将在管道(消息传送)中发生。 或者,如果进程将在业务流程中进行,请将 行程服务扩展程序 属性设置为 业务流程扩展程序

    3. “容器”下拉列表中,展开ReceiveNAOrder,然后单击“接收处理程序”

    4. “服务名称 ”下拉列表中,单击 Microsoft.Practices.ESB.Services.Routing

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

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

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

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

    4. 单击 传输位置 属性,然后键入 c:\howtos\out\wcf%MessageId%.xml

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

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

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

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

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

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

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

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

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

  17. 在工具箱中,单击“ 连接器”。 拖动连接从 RouteToFileFromWCF 模型元素到 SendPortFilterWCF 模型元素。

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

  19. 从工具箱中,将 行程输出端口模型元素 拖到 RouteBrokerService 的右边框。 在 “路线BrokerOutPort1 属性”窗口中,配置以下属性:

    1. 单击 Name 属性,然后键入 WCF 端口

    2. “筛选器 ”下拉列表中,单击 “WCFFilter”。

    3. “解析程序 ”下拉列表中,单击“ ResolverBrokerRoute”。

  20. 从工具箱中,将 “路线出口 模型”元素拖到 RouteBrokerService 的底部边框。 在 “路线BrokerOutPort1 属性”窗口中,配置以下属性:

    1. 单击 Name 属性,然后键入 ASMX 端口

    2. “筛选器 ”下拉列表中,单击 “ASMXFilter”。

    3. “解析程序 ”下拉列表中,单击“ ResolverBrokerRoute”。

  21. 在工具箱中,单击“ 连接器”。 将 WCF 端口 模型元素的连接拖动到 RouteToFileFromWCF 模型元素。

  22. 在工具箱中,单击“ 连接器”。 将连接从 ASMX 端口 模型元素拖到 RouteToFileFromASMX 模型元素。

导出模型以用于路线测试客户端

注释

需要导出行程两次:一次在 XML 中导出,一次导出到数据库,以测试通过中转站的路由。

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

    注释

    将在 Visual Studio 中打开行程的 XML 版本。

  2. 在 Windows 资源管理器中,浏览到 C:\HowTos\Itineraries, and then notice the creation of your itinerary XML (ChoiceRouter.xml)。

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

  4. 在“属性”窗口中,单击“模型导出程序”下拉列表中的“数据库路线导出程序”。

  5. 在“属性”窗口中,将 “行程数据库 ”属性连接字符串设置为指向行程数据库。

  6. 在“ 行程状态 ”属性下拉列表中,选择“ 已部署”。

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

测试行程

  1. 使用在 开发活动的先决条件 (C:\HowTos\ESB.Itinerary.Test.exe - 快捷方式)中创建的快捷方式打开行程测试客户端示例应用程序。

  2. 在“路线测试客户端”中,清除“ 使用 WCF 服务 ”复选框,然后单击“ 加载路线”。

  3. “打开路线文件 ”对话框中,浏览到 C:\HowTos\行程。 选择 ChoiceRouter.xml,然后单击“ 打开 ”加载行程。

  4. 单击 “确定 ”关闭“成功加载路线”消息。

  5. 在“行程测试客户端”中,单击 “加载消息 ”框旁边的省略号按钮(...)。

  6. “选择要加载的 XML 文档 ”对话框中,浏览到 C:\Patterns\HowTos。 选择 NAOrderDoc.xml,然后单击“ 打开 ”以加载测试消息。

  7. 单击“ 提交请求 ”按钮。 测试完成后,单击“ 确定 ”关闭显示的确认消息。

  8. 在 Windows 资源管理器中,浏览到 C:\HowTos\Out. Verify that the ASMX%MessageID%.xml 消息已写入此目录。

  9. 单击“路线测试客户端 使用 WCF 服务 ”复选框。 在“ 行程名称 ”框中,键入 ChoiceRouter,然后单击“ 提交请求 ”按钮。 测试完成后,单击“ 确定 ”关闭确认消息。

  10. 在 Windows 资源管理器中,浏览到 C:\HowTos\Out. Verify that the WCF%MessageID%.xml 消息已写入此目录。

其他资源

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