biztalk - 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) 匹配没有附件并且请求有附件时不同?
解决方案
如果您创建一条新消息,它将获得一个新的 MessageID。如果您希望源自一条消息的所有消息的 ID 相同,则需要BTS.InterchangeID
.
另请参阅Promoting the InterchangeID using a correlation set doesn't work - 为什么不呢?
推荐阅读
- python - Django Rest Framework RelatedField 无法返回 dict 对象
- nuxeo - Nuxeo web-ui 和 jsf 接口同时进行
- dynamic - nuxtjs spa 动态路由在 prod 部署后生成 404
- powershell - 检查字符串是否在字符串数组中
- c# - 如果嵌套数组包含值,则获取所有对象 - ElasticSearch
- c - c中递归函数中的静态变量
- mongodb - Mongo聚合查询不使用索引
- c++ - FILE_FLAG_POSIX_SEMANTICS 不起作用
- javascript - 有没有办法将字符串数组用作具有解构赋值的变量名?(Javascript)
- node.js - 未注册身份验证策略“jwt”