如何:使用消息上下文属性实现基于内容的路由
目标
本部分演示如何使用 Microsoft BizTalk ESB 工具包行程Designer创建基于消息上下文属性选择消息收件人的行程,然后使用路线代理消息服务将消息路由到该收件人。
在本主题中,你将完成以下步骤:
使用一个行程代理和两个具有静态解析程序的路由服务创建行程。
使用路线测试客户端示例应用程序测试行程。
注意
当前实现中未提供基于业务流程的中转站服务。
必备条件
本操作方法主题中的过程要求完成 开发活动的先决条件。
步骤
创建 ESB 路线 DSL 模型
在 Visual Studio 中,打开 C:\HowTos\Patterns\Patterns.sln。
在“解决方案资源管理器”中,右键单击“行程”“库”,指向“添加”,然后单击“新建行程”。
在 “添加新项 ”对话框中,单击“模板”窗格中的“ 行程” “Dsl”。
在 “名称 ”框中,键入 ChoiceRouter,然后单击“ 添加”。
配置行程的属性
在 Visual Studio 中,单击 ChoiceRouter 行程的设计图面。 在 ChoiceRouter 属性窗口中,配置以下属性:
在 “模型导出程序 ”下拉列表中,单击“ XML 行程导出程序”。
在 “扩展程序设置” 部分中,单击“ 行程 XML 文件 ”属性旁边的省略号按钮 (...) 。
在 “导出模式 ”属性下拉列表中,单击“ 严格”。
在“选择 XML 文件”对话框中的“文件名”框中键入 C:\HowTos\Itineraries\ChoiceRouter,然后单击“保存”。
注意
此步骤使你能够将行程作为 XML 导出到本地文件位置。 通过将行程导出到本地文件位置(而不是行程数据库),可以使用 ESB 测试客户端应用程序测试行程。 稍后将在此操作说明主题中完成此过程。
定义行程的结构
从“工具箱”中,将 On-Ramp 模型元素拖到设计图面。 在 OnRamp1 属性窗口中,配置以下属性:
单击 Name 属性,然后键入 ReceiveNAOrder。
在 “扩展程序 ”下拉列表中,单击“ On-Ramp Extender”。
在 “BizTalk 应用程序 ”下拉列表中,单击“ Microsoft.Practices.ESB”。
在 “接收端口 ”下拉列表中,单击“ OnRamp.行程”。
从“工具箱”中,将 “路线代理服务 ”模型元素拖到设计器图面,然后将其置于 On-Ramp 模型元素的右侧。 在 “行程BrokerService1”中,配置以下属性:
单击 Name 属性,然后键入 RouteBrokerService。
在 “扩展程序 ”下拉列表中,单击“ 消息传递代理扩展程序”。
在 “容器 ”下拉列表中,展开“ ReceiveNAOrder”,然后单击“ 接收处理程序”。
在 “服务名称” 下拉列表中,单击“ Microsoft.Practices.ESB.Itinerary.Services.Broker.MessagingBroker”。
右键单击 “筛选器” 集合,然后单击“ 添加新筛选器”。 在 Filter1 属性窗口中,配置以下属性:
单击 “名称” 属性,然后键入 “ASMXFilter”。
单击“ 筛选器 实现”下拉列表,然后单击“ XPath 筛选器”。
单击 Expression 属性,然后键入 count (/ContextProperties/Property[@name='InboundTransportLocation'][contains (., 'ProcessItinerary.asmx') ]) > 0。
右键单击 “筛选器” 集合,然后单击“ 添加新筛选器”。 在 Filter1 属性窗口中,配置以下属性:
单击 “名称” 属性,然后键入 “WCFFilter”。
单击 “筛选器实现 ”下拉列表,然后单击“ XPath 筛选器”。
单击 “表达式 ”属性,然后键入 count (/ContextProperties/Property[@name='InboundTransportLocation'][contains (., 'ESB.ItineraryServices.WCF') ]) > 0。
右键单击 RouteBrokerService 模型元素的 Resolver 集合,然后单击“添加新冲突解决程序”。 在 Resolver1 属性窗口中,配置以下属性:
单击 Name 属性,然后键入 ResolverBrokerRoute。
在 “冲突解决程序实现” 下拉列表中,单击“ MessageContext 解析程序扩展”。
在“工具箱”中,单击“ 连接器”。 将连接从 ReceiveNAOrder 模型元素拖动到 RouteBrokerService 模型元素。
从“工具箱”中,将 “路线服务 ”模型元素拖动到设计图面,然后将其置于 RouteBrokerService 模型元素下。 在“行程服务1”属性窗口中,配置以下属性:
单击 Name 属性,然后键入 RouteToFileFromASMX。
在 “行程服务扩展程序 ”下拉列表中,单击“ 消息传递扩展程序”。
注意
此属性定义该过程将在管道中发生, (消息传送) 。 或者,如果进程将在业务流程中发生,请将 “行程服务扩展程序 ”属性设置为 “业务流程扩展程序”。
在 “容器 ”下拉列表中,展开“ ReceiveNAOrder”,然后单击“ 接收处理程序”。
在 “服务名称” 下拉列表中,单击“ Microsoft.Practices.ESB.Services.Routing”。
右键单击 RouteToFileFromASMX 模型元素的 Resolver 集合,然后单击“添加新冲突解决程序”。 在 Resolver1 属性窗口中,配置以下属性:
单击 Name 属性,然后键入 ResolverFromAsmx。
在 “冲突解决程序实现” 下拉列表中,单击“ 静态冲突解决程序扩展”。
在 “传输名称” 下拉列表中,单击“ 文件”。
单击“ 传输位置” 属性,然后键入 c:\howtos\out\asmx%MessageId%.xml。
从“工具箱”中,将 Off-Ramp 模型元素拖动到设计图面,然后将其置于 RouteToFileFromASMX 模型元素的右侧。 在 OffRamp1 属性窗口中,配置以下属性:
单击 Name 属性,然后键入 SendASMXOrder。
在 “扩展程序 ”下拉列表中,单击“ 关闭渐变 ESB 扩展程序”。
在 “BizTalk 应用程序 ”下拉列表中,单击“ GlobalBank.ESB”。
在 “发送端口 ”下拉列表中,单击“ DynamicResolutionOneWay”。
从“工具箱”中,将 “路线服务 ”模型元素拖动到设计图面,然后将其放置在 RouteToFileFromASMX 模型元素和 SendASMXOrder 模型元素之间。 在“行程服务1”属性窗口中,配置以下属性:
单击 Name 属性,然后键入 SendPortFilterASMX。
在 “行程服务扩展程序 ”下拉列表中,单击“ 非斜坡扩展程序”。
在 “Off-Ramp ”下拉列表中,展开“ SendASMXOrder”,然后单击“ 发送处理程序”。
在“工具箱”中,单击“ 连接器”。 将连接从 RouteToFileFromASMX 模型元素拖动到 SendPortFilterASMX 模型元素。
在“工具箱”中,单击“ 连接器”。 将连接从 SendPortFilterASMX 模型元素拖动到 SendASMXOrder 模型元素。
从“工具箱”中,将 “路线服务 ”模型元素拖动到设计图面,然后将其置于 RouteBrokerService 模型元素的右侧。 在“行程服务1”属性窗口中,配置以下属性:
单击 Name 属性,然后键入 RouteToFileFromWCF。
在 “行程服务扩展程序 ”下拉列表中,单击“ 消息传递扩展程序”。
注意
此属性定义该过程将在管道中发生, (消息传送) 。 或者,如果进程将在业务流程中发生,请将 “行程服务扩展程序 ”属性设置为 “业务流程扩展程序”。
在 “容器 ”下拉列表中,展开“ ReceiveNAOrder”,然后单击“ 接收处理程序”。
在 “服务名称” 下拉列表中,单击“ Microsoft.Practices.ESB.Services.Routing”。
右键单击 RouteToFileFromWCF 模型元素的 Resolver 集合,然后单击“添加新冲突解决程序”。 在 Resolver1 属性窗口中,配置以下属性:
单击 Name 属性,然后键入 ResolverFromWCF。
在 “冲突解决程序实现 ”下拉列表中,单击“ 静态冲突解决程序扩展”。
在 “传输名称” 下拉列表中,单击“ 文件”。
单击“ 传输位置” 属性,然后键入 c:\howtos\out\wcf%MessageId%.xml。
从工具箱中,将 Off-Ramp 模型元素拖到设计图面,然后将其放在 RouteToFileFromWCF 模型元素的右侧。 在 OffRamp1 属性窗口中,配置以下属性:
单击 “名称” 属性,然后键入 SendWCFOrder。
在 “扩展程序 ”下拉列表中,单击“ Off-Ramp ESB Extender”。
在 BizTalk 应用程序 下拉列表中,单击“ GlobalBank.ESB”。
在 “发送端口 ”下拉列表中,单击“ DynamicResolutionOneWay”。
从工具箱中,将 行程服务 模型元素拖到设计图面,然后将其放置在 RouteToFileFromWCF 模型元素和 SendWCFOrder 模型元素之间。 在“行程服务1”属性窗口中,配置以下属性:
单击 “名称” 属性,然后键入 SendPortFilterWCF。
在 “行程服务扩展程序 ”下拉列表中,单击“ 偏离坡道扩展程序”。
在 “Off-Ramp ”下拉列表中,展开 “SendWCFOrder”,然后单击“ 发送处理程序”。
在“工具箱”中,单击“ 连接器”。 将连接从 RouteToFileFromWCF 模型元素拖到 SendPortFilterWCF 模型元素。
在“工具箱”中,单击“ 连接器”。 将连接从 SendPortFilterWCF 模型元素拖到 SendWCFOrder 模型元素。
从“工具箱”中,将 “行程输出” 模型元素拖到 RouteBrokerService 的右边框。 在 ItineraryBrokerOutPort1 属性窗口中,配置以下属性:
单击“ 名称” 属性,然后键入 “WCF 端口”。
在 “筛选器” 下拉列表中,单击“ WCFFilter”。
在 “冲突解决程序 ”下拉列表中,单击“ ResolverBrokerRoute”。
从工具箱中,将 “行程输出” 模型元素拖到 RouteBrokerService 的下边框。 在 ItineraryBrokerOutPort1 属性窗口中,配置以下属性:
单击“ 名称” 属性,然后键入 “ASMX 端口”。
在 “筛选器” 下拉列表中,单击“ ASMXFilter”。
在 “冲突解决程序 ”下拉列表中,单击“ ResolverBrokerRoute”。
在“工具箱”中,单击“ 连接器”。 将连接从 WCF 端口 模型元素拖到 RouteToFileFromWCF 模型元素。
在“工具箱”中,单击“ 连接器”。 将连接从 ASMX 端口 模型元素拖到 RouteToFileFromASMX 模型元素。
导出模型以用于行程测试客户端
注意
需要两次导出行程:一次在 XML 中导出,一次导出到数据库,以测试通过代理的路由。
在 Visual Studio 中,右键单击 ChoiceRouter 行程的设计图面,然后单击“ 导出模型”。
注意
行程的 XML 版本将在 Visual Studio 中打开。
在 Windows 资源管理器中,浏览到 C:\HowTos\Itineraries,然后注意到创建行程 XML (ChoiceRouter.xml) 。
在 Visual Studio 中,右键单击 ChoiceRouter 行程的设计图面,然后单击“ 导出模型”。
在属性窗口,单击“模型导出程序”下拉列表中的“数据库行程导出程序”。
在属性窗口中,将“行程数据库”属性连接字符串设置为指向行程数据库。
在 “行程状态” 属性下拉列表中,选择“ 已部署”。
在 Visual Studio 中,右键单击 ChoiceRouter 行程的设计图面,然后单击“ 导出模型”。
测试行程
使用 在开发活动的先决条件 (C:\HowTos\ESB.Itinerary.Test.exe - 快捷方式) 中创建的快捷方式打开行程测试客户端示例应用程序。
在“行程测试客户端”中,清除“使用 WCF 服务检查”框,然后单击“加载行程”。
在“ 打开行程文件 ”对话框中,浏览到 C:\HowTos\行程。 选择 “ChoiceRouter.xml”,然后单击“ 打开 ”以加载行程。
单击 “确定 ”关闭“已成功加载行程”消息。
在“行程测试客户端”中,单击“ 加载消息 ”框旁边的省略号按钮 (...) 。
在 “选择要加载的 XML 文档 ”对话框中,浏览到 C:\Patterns\HowTos。 选择“NAOrderDoc.xml”,然后单击“ 打开 ”以加载测试消息。
单击“ 提交请求” 按钮。 测试完成后,单击“ 确定 ”关闭显示的确认消息。
在 Windows 资源管理器中,浏览到 C:\HowTos\Out。验证 ASMX%MessageID%.xml 消息是否已写入此目录。
单击“行程测试客户端使用 WCF 服务检查”框。 在“ 行程名称 ”框中,键入 ChoiceRouter,然后单击“ 提交请求 ”按钮。 测试完成后,单击“ 确定 ”关闭确认消息。
在 Windows 资源管理器中,浏览到 C:\HowTos\Out。验证 WCF%MessageID%.xml 消息是否已写入此目录。
其他资源
有关详细信息,请参阅下列相关主题: