首页 > 解决方案 > 具有单独 TimeOutException 处理的 BizTalk Parallel Convoy 无法生成错误消息“致命错误 X1001:未知系统异常”

问题描述

考虑 BizTalk 2016 中并行护航模式的以下基本结构。它是具有 2 个活动接收形状的并行操作。结合由两个活动接收初始化的单个相关集。

现在,当我想要单独的异常处理时出现了我的问题,一个用于左接收,一个用于右接收。所以我在左接收(Scope_1)周围放置了一个超时范围。我已经将该范围包装在另一个范围(Scope_3)中,以捕获超时异常。

现在由于某种原因这是不允许的,我在构建时返回“致命错误 X1001:未知系统异常”。

失败

但是,如果我将 scope_3 包裹在两个活动接收周围,它就会成功构建:

在此处输入图像描述

BizTalk 在这种情况下不允许单独的超时异常处理有什么显着区别?

顺便一提:

  1. 不管我试图捕捉什么类型的异常,或者我的所有范围是否都是长期运行的事务,错误的发生都是一样的。
  2. 如果我为每个接收设置单独的相关集,则不会发生错误,但这当然不是我想要的,因为那时它不会使其成为并行车队。
  3. 将范围设置为同步不会影响行为。

标签: biztalkbiztalk-2016biztalk-orchestrations

解决方案


显着的区别在于,Orchestration 将在收到第一条消息时启动,该消息可能不是 scope_1。因此,在那种情况下不会启动计时器。如果它是scope_1,那么它不会因为你收到它而超时,但它不会因为scope_2而超时。

在这两种情况下都有计时器,确实在两种情况下都设置了超时。

您可以做的是根据您的第二个示例设置超时范围,并设置一个标志以指示接收到哪个标志,并在您的异常块中使用它。

其他选项是初始化相关集的第一个接收形状,然后是第二个接收形状,它具有以下相关性并具有超时。


推荐阅读