5

我有一个带有直接绑定逻辑端口的编排。让我们称之为“O1” O1 订阅消息类型“A”(在接收端口的过滤器属性中指定)

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

到目前为止,一切都很好...

我有第二个编排“O2”,它构造一条“A”类型的消息并将其推送到消息框。

发生这种情况时,我会启动许多 O1 实例。我能想到的是,只要存在 O1 的实例,消息仍然可以在消息框上供订阅者使用。因此,我将不断创建编排实例。

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

非常感谢有人可以解释发生了什么以及我缺少什么!

4

1 回答 1

6

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

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

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

现在是有趣的部分。Direct-Bound 端口(尤其是 Message Box 种类)的一个常见缺陷是创建无限循环。想象一个只包含两个形状的简单编排,一个 Activate=True Receive 形状(当然是直接绑定)和一个仅将消息转发到 FILE 端口的 Send 形状。当这个编排发送消息时,它去哪里了?和往常一样,首先到消息框。每当消息到达消息框时,BizTalk 就会搜索任何匹配的订阅。该消息与最初激活编排的消息有何不同?它不会,因此 BizTalk 将很乐意启动您的编排的另一个实例来处理它,依此类推,直到您耗尽内存。

于 2011-04-09T17:56:17.230 回答