合作伙伴业务流程直接绑定端口提供业务流程之间通过端口就行通讯的能力。跟自相关不同,合作伙伴业务流程直接绑定是一个流程的端口把消息发送到另一个流程的端口,消息并不需要返回到发送流程。
可以建立两种模式的合作伙伴业务流程直接绑定:
前向合作伙伴业务流程直接绑定
这是合作伙伴业务流程直接绑定的典型模式,这种情况有一个预设的接收orchestration ,前向合作伙伴业务流程直接绑定允许有多个发送流程把消息发向同一个预设的接收流程。
逆向合作伙伴业务流程直接绑定
这是合作伙伴业务流程直接绑定的非典型模式,这种情况有一个预设的发送orchestration ,逆向合作伙伴业务流程直接绑定允许有多个接收流程接收同一个预设的发送流程发送的同一消息。
本测试源代码:/Files/chnking/PartnerOrchestrationSamples.rar
有这样一个xml文档:
<ns0:Root xmlns:ns0="http://PartnerOrchestration.InputSch">
<OrcheA></OrcheA>
<OrcheB></OrcheB>>
<OrcheC></OrcheC>
<OrcheD></OrcheD>
</ns0:Root>
经过下面过程的处理:
Figure 26. Panter Orchestration测试项目示意图
消息被OrchestrationA从输入文件夹接收,在OrchestrationA中把消息的OrcheA元素置为“A”。
OrchestrationA把消息通过前向合作伙伴业务流程直接绑定端口把消息发送到OrchestrationB。
这里OrchestrationB的接收端口是预设的前向合作伙伴业务流程直接绑定接收端口,它可以接收多个通过合作伙伴业务流程直接绑定发送端口发来的消息,不过本例中没有使用多个发送流程发送消息到同一个接收端口。
OrchestrationB中把消息的OrcheB元素置为“B”。
OrchestrationB把消息通过逆向合作伙伴业务流程直接绑定端口把消息发送到两个流程。
OrchestrationC和OrchestrationD接收到来自OrchestrationB的同一个消息,各自分别处理,分别把OrcheC元素置为“C”和把OrcheD元素置为“D”。
OrchestrationC和OrchestrationD把消息都发送到输出文件夹中。
四个流程实现的功能都很简单,都是把接收到的消息中的一个可分辨字段赋一个相应的值,然后发送初五。流程设计这里就不一一说明了,要仔细描述的是OrchestrationB中的两个合作伙伴业务流程直接绑定端口和跟这两个端口相关的几个端口的设置。
前向绑定模式是先预设一个接收端口,以这个接收端口为中心,可以有多个发送端口发送消息到这个预设接收端口。
接收端设置:
新建预设接收端口,在向导中新建一个端口类型。
端口绑定:选择Direct
三种直接绑定模式中:选To receive messages from other orchestrations, select this port here and in those orchestrations。
合作伙伴业务流程上的端口:选这个端口自身。选择自身表示这是个预设端口,也决定了这个绑定是前向的或者是逆向的。这里把接收端口设置为预设端口,表示跟这个端口绑定就是前向合作伙伴业务流程直接绑定。
发送端设置:
端口类型:选择上面步骤预设的接收端口类型
端口绑定:选择Direct
三种直接绑定模式中:选send messages to other orchestrations, select this port here and in those orchestrations。
合作伙伴业务流程上的端口:选上面步骤预设的接收端口。发送端可以有多个。
逆向绑定模式是先预设一个发送端口,以这个发送端口为中心,可以有多个接收端口接收从这个预设发送端口发布的消息。
发送端设置:
新建预设发送端口,在向导中新建一个端口类型。
端口绑定:选择Direct
三种直接绑定模式中:选send messages to other orchestrations, select this port here and in those orchestrations。
合作伙伴业务流程上的端口:选这个端口自身。
接收端设置:
端口类型:选择上面步骤预设的发送端口类型
端口绑定:选择Direct
三种直接绑定模式中:选To receive messages from other orchestrations, select this port here and in those orchestrations。
合作伙伴业务流程上的端口:选上面步骤预设的发送端口。接收端可以有多个。
OrchestrationB接收端口订阅OrchestrationA发送端口的订阅是前向绑定,查看它的订阅关系,主要看订阅条件:
Figure 27. Panter Orchestration前向订阅条件
Subscription:
{
ORGroup0
{
BTS.Operation == Operation_1
And
BTS.PartnerPort == Port_ReceivePartner
And
BTS.PartnerService == PanterOrchestration.OrchestrationB, PanterOrchestration, Version=
And
BTS.MessageType == http://PartnerOrchestration.InputSch#Root
}
}
BTS.Operation:接收端口接收消息的那个Operation名
BTS.PartnerPort:接收端口名。
BTS.PartnerService:接收端口所在的Orchestration的完全名称。
BTS.MessageType:订阅的消息类型。
发送端口跟预设的接收端口绑定后,会在发出的消息中加入指向这个接收端口的三个属性:BTS.PartnerService、BTS.PartnerService、BTS.Operation,加上消息类型,这些消息的属性正好能和预设接收端口产生的订阅条件配合,发送端口发布的消息就能被预设接收端口接收到了。
OrchestrationC和OrchestrationD的接收端口订阅OrchestrationB发送端口的订阅是逆向绑定,查看它们的订阅关系,看订阅条件:
Figure 28. Panter Orchestration逆向订阅条件
Subscription:
{
ORGroup0
{
BTS.Operation == Operation_1
And
BTS.PartnerPort == Port_SentPartner
And
BTS.PartnerService == PanterOrchestration.OrchestrationB, PanterOrchestration, Version=
And
BTS.MessageType == http://PartnerOrchestration.InputSch#Root
}
}
BTS.Operation:发动端口发送消息的那个Operation名
BTS.PartnerPort:发送端口名。
BTS.PartnerService:发送端口所在的Orchestration的完全名称。
BTS.MessageType:订阅的消息类型。
其它的接收端口跟预设发送端口绑定后,会产生上面这样的订阅。预设发送端口在发出的消息中消息中加入表示这个发送端口的三个属性:BTS.PartnerService、BTS.PartnerService、BTS.Operation,加上消息类型,预设发送端口发出消息的属性正好能和跟这个端口绑定的所有接收端口产生的订阅条件配合。
参考资料:BizTalk Server 2004: Direct Binding models in BizTalk
Starting BizTalk Server 2004 orchestrations using the MessageAgent