【问题标题】:BizTalk Orchestration to receive multiple messages from XMLReceive pipeline from two-way send port?BizTalk Orchestration 从双向发送端口接收来自 XMLReceive 管道的多条消息?
【发布时间】:2020-08-22 09:29:53
【问题描述】:
我有一个带有双向发送端口的编排,用于从数据库中检索一个或多个项目。我使用 WCF-SQL 适配器,并成功地将传入的结果分批处理到单独的 StoredProcedureResultSet0 消息中。但是,编排只处理一条消息并结束。
有没有办法让接收编排在结束之前循环返回消息?
我现在收到的未处理消息的错误消息:
实例完成但未使用所有消息。该实例及其未使用的消息已暂停。
我知道有些人已经开始使用编排中的管道进行分批。我认为最好在尽可能靠近源的地方进行分批。
想法?
【问题讨论】:
标签:
biztalk
biztalk-2016
biztalk-orchestrations
【解决方案1】:
最终的解决方案是直接在接收管道中进行分批。在编排中使用 XPath 存在性能风险,并且使用相关集(如 @Dijkgraaf 回答的那样)也存在风险。
但是,在尝试实施选择的解决方案时,我遇到了以下问题:
如果存储过程没有返回任何结果,XMLReceive 管道无法分批消息。这是因为如果没有返回行,WCF-SQL 适配器会忽略结果元素,并且去批处理(Body XPath)需要它存在。此外,即使使用 XPath 函数 count() 没有结果,也尝试让 Body XPath 工作,但 BizTalk 不允许“复杂”XPath 表达式(由错误消息给出,未找到参考)。
因此,我必须开发一个接收解码自定义管道组件来添加缺少的元素。然后 XML Disassmebler 工作并使用消息,即使元素为空。
【解决方案2】:
您必须有一个相关集,其中第一个接收形状初始化相关集,然后您在一个循环中接收一个带有跟随相关集的接收。棘手的部分是确定您可以关联什么以及循环的退出条件。这就是为什么在 Orchestration 中使用 Pipeline 或 map 进行分批通常更容易的原因。