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

目标

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

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

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

  • 使用路线测试客户端示例应用程序测试行程。

注意

当前实现中未提供基于业务流程的中转站服务。

必备条件

本操作方法主题中的过程要求完成 开发活动的先决条件

步骤

创建 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 Extender”。

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

    4. “接收端口 ”下拉列表中,单击“ OnRamp.行程”。

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

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

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

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

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

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

    1. 单击 “名称” 属性,然后键入 “ASMXFilter”。

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

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

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

    1. 单击 “名称” 属性,然后键入 “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 模型元素下。 在“行程服务1”属性窗口中,配置以下属性:

    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. “扩展程序 ”下拉列表中,单击“ 关闭渐变 ESB 扩展程序”。

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

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

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

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

    2. “行程服务扩展程序 ”下拉列表中,单击“ 非斜坡扩展程序”。

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

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

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

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

    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. 单击 “名称” 属性,然后键入 SendWCFOrder

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

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

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

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

    1. 单击 “名称” 属性,然后键入 SendPortFilterWCF

    2. “行程服务扩展程序 ”下拉列表中,单击“ 偏离坡道扩展程序”。

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

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

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

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

    1. 单击“ 名称” 属性,然后键入 “WCF 端口”。

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

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

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

    1. 单击“ 名称” 属性,然后键入 “ASMX 端口”。

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

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

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

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

导出模型以用于行程测试客户端

注意

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

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

    注意

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

  2. 在 Windows 资源管理器中,浏览到 C:\HowTos\Itineraries,然后注意到创建行程 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。验证 ASMX%MessageID%.xml 消息是否已写入此目录。

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

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

其他资源

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