为什么我的BizTalk Orchestration多次从消息框中获取相同的消息

TJ *_*mas 5 binding biztalk orchestration

我有一个带有直接绑定逻辑端口的业务流程.让我们称之为"O1"O1订阅消息类型"A"(在接收端口的filter属性中指定)

当O1收到类型为"A"的消息时,它会在完成之前等待一些用户输入.(这里有一些相关性)

到现在为止还挺好...

我有第二个编排,"O2",它构造并将"A"类型的消息推送到消息框.

当发生这种情况时,我会启动许多O1实例.我能想到的只是,只要存在O1的实例,消息仍然可以在消息框上供订阅者使用.所以,我将获得不断创建业务流程的实例.

当Orchestration正在处理消息时,它是否会保留在消息框中直到完成?

非常感激有人可以解释发生了什么以及我错过了什么!

Iga*_*ban 6

当Orchestration正在处理消息时,它是否会保留在消息框中直到完成?

实际上,消息在消息框中,但它被标记为活动.所以没有其他过程会使用它.也许O1正在构建A类消息,因此它会重新激活自己.

看看这个提示和技巧文章:

现在是有趣的部分.Direct-Bound端口的常见缺陷,特别是Message Box变种,正在创建一个无限循环.想象一个简单的编排只包含两个形状,一个Activate = True Receive形状(当然是直接绑定)和一个只将消息转发到FILE端口的Send形状.当这个业务流程发送消息时,它会在哪里发生?一如既往,首先到消息框.每当消息到达消息框时,BizTalk都会搜索匹配的任何订阅.这条消息与首先激活业务流程的消息有何不同?它不会,所以BizTalk很乐意启动你的业务流程的另一个实例来处理它,等等,直到你的内存不足.

  • 为了在两个业务流程之间以串行方式"重用"消息A,您需要添加其他过滤器.您可以向"A"消息模式添加某种类型的状态字段并进行提升,或者在消息上使用上下文属性 - 例如,请参阅http://blogs.msdn.com/b/dhtoran/archive/2005/ 07/07/436395.aspx (2认同)