BizTalk 2013-BTS.MessageID和outMsg.MessageID不匹配

问题描述

我正在使用BizTalk Server2013。在反汇编阶段,我有一个自定义接收管道组件。该组件根据“位置”节点将输入的xml消息分解为单独的消息。例如,如果输入消息有3个位置,则它将分为3个消息,每个位置一个。输入消息也可以具有二进制数组的附件。定制管道组件实现IdisassemblerComponent。 对于每个位置,都会这样创建一条新消息- outMsg = pContext.GetMessageFactory().CreateMessage(); 在业务流程中,像这样检索消息ID-messageId = myMsg(BTS.MessageID);

业务逻辑依赖于messageId来将请求标记为已处理。

问题-当输入请求没有任何附件时,outMsg.MessageID和myMsg(BTS.MessageID)匹配,因此,业务逻辑正常工作并将请求标记为完成。但是,如果输入请求具有附件,则outMsg.MessageID和myMsg(BTS.MessageID)不同,业务逻辑将挂起该请求。我使用了1 MB的附件来重现此问题。

我试图通过在管道组件中提升outMsg.MessageID来解决此问题,并将其用于业务流程而不是myMsg(BTS.MessageID)。 但是,我不确定这是否是正确的方法,是否想找出并解决根本原因。

outMsg.MessageID和myMsg(BTS.MessageID)为什么不带附件匹配,而请求有附件时又为什么不同?

解决方法

如果创建新消息,它将获得一个新的MessageID。如果您希望一个消息中的所有消息都具有相同的ID,则需要BTS.InterchangeID

另请参见Promoting the InterchangeID using a correlation set doesn't work - why not?

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...