问题描述
我正在使用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?