首页 > 解决方案 > BizTalk 2013 - BTS.MessageID 和 outMsg.MessageID 不匹配

问题描述

我正在使用 BizTalk Server 2013。我在反汇编阶段有一个自定义接收管道组件。该组件根据“位置”节点将输入 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) 匹配没有附件并且请求有附件时不同?

标签: biztalkbiztalk-2013biztalk-pipelines

解决方案


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

另请参阅Promoting the InterchangeID using a correlation set doesn't work - 为什么不呢?


推荐阅读