BizTalk Orchestration 从双向发送端口接收来自 XMLReceive 管道的多条消息?

BizTalk Orchestration to receive multiple messages from XMLReceive pipeline from two-way send port?

我有一个带有双向发送端口的编排,用于从数据库中检索一个或多个项目。我使用 WCF-SQL 适配器,并成功地将传入结果分批处理为单独的 StoredProcedureResultSet0 消息。但是编排只处理一条消息就结束了

有没有办法让接收编排在结束之前循环返回的消息?

我现在收到的关于未处理消息的错误消息:

The instance completed without consuming all of its messages. The instance and its unconsumed messages have been suspended.

我知道有些人已经从编排内部使用管道启动了分批处理。我认为最好是尽可能靠近源头进行分批处理。

想法?

您必须有一个相关集,其中第一个接收形状初始化相关集,然后您有一个循环中的接收,其中接收具有以下相关集。棘手的部分是确定您可以关联的内容以及循环的退出条件。这就是为什么在 Orchestration 中使用 Pipeline 或 maps 来 debatch 通常更容易。

最终解决方案是直接在接收管道中进行分批处理。在 Orchestration 中使用 XPath 有性能风险,使用相关集,如@Dijkgraaf 回答的那样,也有风险。

但是,在尝试实施选择的解决方案时,我遇到了以下问题:

XML如果存储过程未返回任何结果,则接收管道无法对消息进行分批处理。这是因为如果没有返回任何行,WCF-SQL 适配器将忽略结果元素,并且分批处理(正文 XPath)要求它存在。此外,即使使用 XPath 函数 count() 没有结果,也尝试让 Body XPath 工作,但 BizTalk 不允许 "complex" XPath 表达式(由错误消息给出,未找到参考)。

因此,我必须开发一个接收解码自定义管道组件,以便在缺少元素时添加该元素。然后 XML Disassmebler 工作并使用消息,即使元素为空。