业务流程
业务流程 是可执行的业务流程,可以订阅 (接收) 和发布 (通过 MessageBox 数据库发送) 消息。 此外,业务流程可以构造新的消息。 使用消息生命周期中讨论的订阅和路由基础结构接收 消息。 在填入业务流程的订阅后,将激活新的实例并传送消息;对于实例订阅,如有必要,将解除对该实例的冻结,然后传送消息。 如果从业务流程发送消息,则这些消息将发布到 MessageBox,发布的方式如同消息到达接收位置,相应的属性将插入数据库以用于路由。
在业务流程中构造的消息必须放置在 MessageBox 数据库中并由业务流程实例引用,但不应发布这些消息,因为它们尚未发送。 XLANG/s 子服务调用消息代理 API 直接插入消息。 这样,业务流程引擎就可以将消息正文插入 MessageBox,并将其直接与正在运行的业务流程实例相关联。 MessageBox 数据库中构造的消息的持久化与业务流程中的持久化点协调作为数据库操作的其他优化。
业务流程中使发布和订阅作用不同的概念是绑定。 业务流程端口是说明交互的逻辑端口。 必须将这些逻辑端口绑定到物理端口以便消息传送,但是此绑定进程只不过是为消息路由配置订阅。
有四个基本选项用于绑定这些端口:
立即指定(在业务流程中直接指定端口)
以后指定(在部署时指定端口)
使用动态发送端口,其中地址在业务流程代码中设置
创建从业务流程到 MessageBox 数据库或其他业务流程的直接绑定
部署业务流程
如果在设计时指定绑定,则在部署业务流程时,将创建与该业务流程中所配置参数相匹配的物理端口。 如果在部署时配置绑定,则满足逻辑端口要求的任何端口都能绑定到业务流程端口。 对于动态绑定,就像使用“立即指定”选项一样创建物理端口,但是该端口是没有配置地址信息的动态发送端口。
容易混淆的一个概念是:尽管业务流程中的端口绑定到物理发送端口,但这并不会阻止消息送达到其他订户。 即,如果另一个发送端口恰好具有发送到绑定端口的消息的订阅(通过其筛选器),则两个发送端口都接收该消息。 绑定仅创建订阅,以便从业务流程发送的消息始终与绑定发送端口的条件相匹配。 同样,绑定到接收端口的业务流程端口会根据消息类型和接收端口 ID 创建相应的订阅。 订阅保证传入和传出业务流程的消息传递到绑定端口,但消息仍会通过前面所述的相同发布和订阅机制。
可能最常被误解、误用和未充分利用的绑定选项是直接绑定选项。 直接绑定允许业务流程使用不同的路由属性将消息发布到 MessageBox 数据库,很像消息是由接收位置发布的。 在简单直接消息传送中,与接收到 BizTalk Server 中的任何其他已发布消息的路由方式一样,使用升级属性将消息发布到 MessageBox。 这样,任何订户都可以接收此消息,但是要求至少存在一个订户,否则业务流程将收到路由故障错误。
直接绑定的另一个选项是使用自相关端口。 自相关端口是这样的端口:创建唯一相关标记并在实例之间将消息相关时独立使用该标记。 自相关端口最常用于调用或启动传入端口参数的业务流程。 在调用的业务流程中,该端口可用于发送消息;而在调用业务流程中,相同的端口可用于接收消息。 由于端口具有唯一的相关标记,因此消息将路由回调用业务流程。 自相关端口充当业务流程实例之间的专用通信信道。
最后一个选项是使用合作伙伴业务流程,其中(在调用业务流程和调用的业务流程中),使用相同的共享端口类型配置端口,在端口配置中选择相同的端口。 例如,在 Orch1 和 Orch2 中都选定 Orch2.MyDirectPort。 此类型的绑定基于发送业务流程类型、端口名称和操作名称为接收业务流程设置订阅。 这样再次确保消息路由至正确的实例。
所有的直接消息传送选项都使用基本的发布和订阅模型。 这些选项之间的差别在于,创建订阅和路由的选项不同,以及选项针对的使用情况有所不同。
在业务流程中使用直接绑定端口的一个常见问题是:业务流程可能发布被订阅的消息。 例如,某个业务流程配置为由 PurchaseOrder 消息激活。 此业务流程使用直接端口将 PurchaseOrder 消息发布到 MessageBox。 但是,除了按预期方式接收消息外,将启动另一个业务流程实例,因为该业务流程也具有 PurchaseOrder 消息的订阅。 该处理进入无穷循环,开发人员可能需要花费一些时间来判断发生的情况。
关联
业务流程中的关联是将相关消息接收到同一正在运行的业务流程实例的机制。 在业务流程设计器中,开发人员按照以下通用步骤使用相关:
定义包含升级属性、用于将消息相关的相关类型。
定义相关集(刚定义的相关类型的实例)。
对于发送和接收端口,指定是否初始化或沿用给定相关集。
实例订阅在初始化相关集时开始起作用,如同为所有沿用此相关集接收消息的端口创建订阅时一样。 由于相关类型定义用于相关的属性,因此业务流程引擎可以从初始化操作发送或接收的消息中提取这些属性。 然后将这些值用于为沿用此相关集的所有剩余操作定义订阅。
务必正确定义接收到 BizTalk Server 并用于相关的消息的升级属性,并将属性升级到消息上下文。 大多数属性在管道中的拆装器组件提取值(在最初接收消息时)时被升级。 因此,不能使用直通接收管道来接收必须与正在运行的业务流程实例相关的消息。 在使用 SOAP 接收适配器接收相关消息时会出现此问题,因为直通管道是使用 Web Services 发布向导时接收管道的默认值。