我正在使用 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) 匹配没有附件并且请求有附件时不同?