65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 BizTalk ESB 行程和采购订单 (PO) 流程的 Hello World

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.71/5 (6投票s)

2011年11月22日

CPOL

5分钟阅读

viewsIcon

85843

downloadIcon

2918

本文试图使用采购订单处理示例来解释 BizTalk ESB 行程简单的路由规则模式。

介绍 BizTalk ESB 路线的“Hello World”

在本文中,我们将介绍一个简单的路线,该路线处理 PO 消息并生成 PO-确认。基本上,PO 会转换为 POA 并写入各种位置。

UseCase.PNG

什么是 BizTalk ESB 路线?

简单来说,`路线` 是对消息执行的一系列操作,可能涉及`路由`和`转换`。路线是`路由滑块`模式的实现,本质上是对特定消息执行一系列处理步骤。有关更多信息,请参阅文章末尾的参考部分。

路线的生命周期包含什么?

ESBLifecycle.PNG

  1. ESB 入口点:ESB 入口点接收消息。消息可能不包含路线。
  2. ESB 管道组件:ESB 管道组件将路线作为提升的属性复制到消息的上下文中。路线在消息的整个生命周期中保留在消息上下文中。
  3. BizTalk Message box:消息发布到 Microsoft BizTalk Server Message Box 数据库,BizTalk 在其中评估消息的提升属性,并将消息排队等待一个或多个订阅者。
  4. ESB 出口点:订阅者可以是直接绑定的编排(在接收形状上设置了一些筛选属性)或动态 BizTalk Server 发送端口,这也称为 ESB 出口点。

路线概念

什么是入口点?

负责接收 ESB 目标消息的 BizTalk 接收位置称为`入口点`。

什么是出口点?

ESB`出口点`对应于具有为 ESB 提升属性设置的筛选器的 BizTalk 动态发送端口。

什么是 ESB 解析器?

解析器的目的是在消息级别支持解析和路由,而无需使用 BizTalk 编排。BizTalk ESB Toolkit 包括以下解析器:STATIC、UDDI、UDDI3、XPATH、BRE、BRI、ITINERARY、ITINERARY-STATIC 和 LDAP。有关更多信息,请参阅文章末尾的参考部分。

常用 ESB 解析器

解析器的连接字符串包含一个`监视器`,后跟“:\”和处理详细信息。请参阅以下示例

ITINERARY:\\name=TwoWayTestItinerary;version=;
BRE:\\policy=GetCanadaEndPoint;version=;useMsg=False;
BRI:\\policy=ResolveItinerary;version=;useMsg=True;

注意:如果要将消息的上下文和正文传递给规则引擎,请将属性 `usgMsg` 设置为 `'True'`。

您知道 BRE 解析器和 BRI 解析器之间的区别吗?

定义如下:BRE 代表`“业务规则引擎解析器”`,而 BRI 代表`“业务规则路线解析器”`。

BRI 解析器用于从数据存储中解析`路线`,而 BRE 解析器仅负责解析`传输`信息和`转换`信息。

我们的“Hello World”式 PO 处理路线

此路线实现了什么?

此路线的目标是处理 PO。PO 将被`转换`为 PO-Ack,并`路由`到 PO 存档文件夹和 PO-Ack 文件夹。

SimpleRoutingSlip.PNG

各步骤说明

  1. 当消息在入口点接收时,接收处理程序配置为`转换`和`路由`消息。
  2. 第一个接收处理程序转换 PO 消息并创建 PO-确认消息。
  3. 第二个接收处理程序使用 STATIC 解析器路由消息,将消息发送到各种文件夹(*确认*和*存档*文件夹)。
  4. 使用出口点扩展程序配置出口点。
  5. 最后,出口点使用动态路由将消息传输到各种文件夹。

开发说明

路线开发期间的常见错误

场景 1:用作出口点的动态发送端口的筛选器未设置时会发生什么?

The 'ServiceType' property value should not be empty or null. Location: SendPortFilter    
The 'ServiceName' property value should not be empty or null. Location: SendPortFilter
The 'ServiceState' property value should not be empty or null. Location: SendPortFilter

场景 2:未找到请求的值“`转换`”。

Requested value 'Transformation' was not found. 
Source: Microsoft.Practices.ESB.Itinerary.OM.V1.ItineraryV1 
Method: System.String AdvanceByOrder
(Microsoft.Practices.ESB.Itinerary.ItineraryMessageDirection, System.String, 
Microsoft.Practices.ESB.Itinerary.IItineraryStep, System.Action, Boolean) 

解决方案:解决方案是查看路线 XML 文件。在 XML 文件中,查看 `Service` 元素和 `name` 属性,它必须与路线的名称匹配。可能会出现这种情况:您在创建路线后重命名了它,这会导致上述错误。

场景 3:过程或函数“`Itinerary_getitinerary”需要参数“`@name”,但未提供该参数。

Procedure or function 'Itinerary_getitinerary' expects parameter 
'@name', which was not supplied.  
Source: Microsoft.Practices.ESB.Resolver.ResolverMgr 
Method: System.Collections.Generic.Dictionary`2[System.String,System.String] 
Resolve(Microsoft.Practices.ESB.Resolver.ResolverInfo, 
Microsoft.BizTalk.Message.Interop.IBaseMessage, 
Microsoft.BizTalk.Component.Interop.IPipelineContext) 

原因:使用 BRI 解析器在总线上放置了不正确的消息,导致 ESB 系统无法解析`路线`时发生此情况。使用 BizTalk 管理控制台并检查消息及其提升的属性。

场景 4:错误 135008:在存储库中找不到路线

解决方案:检查 `[EsbItineraryDb].[dbo].[Itinerary]` 表中对应路线的 `[nStatus]` 列,它必须设置为 `1`。
注意:您可能需要重新启动主机实例,因为路线会被缓存。

路线部署注意事项

建议在部署之前将所有路线从设计器导出为 XML。

用于路线部署的 EsbImportUtil 命令行工具

您可以在 _C:\Program Files (x86)\Microsoft BizTalk ESB Toolkit 2.1\Bin_ 中找到它

esbimportutil.exe /f:simpleroutingslip.xml /c:deployed /o 

关注点

  1. 您的路线中可以有多个出口点,但只能有一个入口点。
  2. 观察路线中的“`RouteToARecepient”形状,有多个解析器,请注意,默认情况下,任何时候只有一个解析器会执行。
  3. 执行多个解析器的方法是编写自定义管道。观察自定义管道的屏幕截图。

    CustomPipeline.PNG

  4. 应用于消息的路线本身在接收位置使用 `ResolverConnectionString` 属性进行设置。这可以是`静态`值,也可以使用 BRE 解析器动态确定。

    RoutingSlipConfigurePipeline.PNG

  5. 您可以使用 Visual Studio 轻松部署路线,只需右键单击路线设计器并选择`导出模型`。请注意,路线状态必须为`已部署`状态。

    RoutingSlipExportModel.PNG

  6. 请注意,动态发送端口作为出口点所需的筛选器设置。

    RoutingSlipSendPortFilters.PNG

可下载代码

代码是在 Visual Studio 2010 中使用 BizTalk Server 2010 和 ESB Toolkit 2.1 开发的。

参考文献

© . All rights reserved.