0

我在 BizTalk 业务流程中使用平行形状。形状中有四个平行的分支,在每个分支中,我使用一个范围形状(事务类型 = 无)和后续的 catch 块,并且执行逻辑放置在范围形状中。

此并行 Shape 也包含在具有相应 catch 块的编排中的范围(Transaction Type = None )中。

现在,如果其中一个分支中的执行失败,假设的行为是什么?根据我的说法,如果一个分支的执行失败,则应该执行另一个分支。

但是在我的编排中,如果一个分支执行失败,则另一个分支执行甚至都不会启动。似乎在前一个分支代码成功执行后,其他分支开始执行。

请告诉我这种行为的可能来源是什么?

4

2 回答 2

1

根据 MSDN,Parallel 形状将使其所有分支独立运行请参阅 MSDN: http: //msdn.microsoft.com/en-us/library/ee253584 (v=bts.10).aspx

然而,这是从业务流程的角度来看,而不是从技术的角度来看。如果您的一个分支发生故障,则完全有可能不会执行其他分支。据我所知,您无法控制执行顺序(虽然不确定)。

有关详细信息,请参阅此小型博客文章:http: //blogs.msdn.com/b/pkelcey/archive/2006/08/22/705171.aspx

根据您的具体情况,聚合器模式在这里可能是一个好主意。它会让你完全控制局势。

于 2014-11-13T09:20:02.033 回答
0

基本上,如果其中一个分支出现故障,那么所有分支都会出现故障。要记住的关键点是:

All branches come together at the end of the Parallel Actions shape, and processing does not continue until all have completed.

因此,如果其中一个分支失败,那么它们将永远不会收敛。如果在一个分支上抛出异常,catch 块将捕获它,并且所有其他分支将停止处理任何传入的消息。据我了解,并行分支主要用于消息关联,用于需要等待多条消息到达才能继续进行的情况。分支执行的顺序由每个分支所期望的接收到的消息的顺序决定。

于 2014-12-25T07:15:19.467 回答