You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

BizTalk 2020的Receive.dll为何将XML消息包裹在带xmlns的string元素中

解决方案

你当前遇到的问题本质是两点:一是HTTP接收组件自动将请求内容序列化为WCF标准字符串格式,外层包裹了固定的<string>根节点;二是内部原始XML被做了HTML转义处理,<、>等符号被替换为转义字符,即便移除外层<string>节点,内部转义内容也无法被XML架构识别。

下面分优先级给出可落地的处理方案:

方案1:修改HTTP接收适配器配置(优先推荐,无需编码)

这是最省事的根解决方案,直接避免消息被封装和转义:

  • 打开BizTalk管理控制台,找到对应接收位置的HTTP适配器配置
  • 取消勾选以字符串形式传递请求正文类的选项(不同版本适配器选项名称略有差异,核心是不要让适配器把请求当成普通字符串序列化)
  • 保存配置后重启接收位置,后续收到的消息就会是原始的Select格式XML,可直接被对应架构识别

方案2:自定义接收管道处理(次选,适合无法修改适配器配置的场景)

在接收管道的解码阶段完成消息预处理,比在业务流程处理性能更高、耦合度更低:

  • 新建自定义接收管道组件,在Execute方法中按以下逻辑处理消息流:
    1. 读取完整消息流转换为字符串
    2. 调用System.Web.HttpUtility.HtmlDecode()方法还原所有转义字符
    3. 加载为XML文档,使用XPath提取/string节点的内部文本,即原始的Select XML内容
    4. 将处理后的XML重新转为流,重置流位置为0后返回
  • 在接收管道的解码阶段加入该自定义组件,后续接XML反汇编器,指定你的Select消息对应的架构即可完成消息解析

方案3:修正业务流程内的处理逻辑(适合必须在流程内处理的场景)

你之前的操作遗漏了转义还原和MessageType属性配置的步骤,按以下方式修正:

  • 接收原始消息后,先将整个消息内容读取为字符串,先执行HTML转义还原
  • 加载还原后的内容为XML文档,提取内部的Select节点
  • 将Select节点赋值给业务流程中对应类型的消息时,手动设置消息的上下文属性:
    目标Message(BTS.MessageType) = "http://schemas.microsoft.com/Sql/2008/05/TableOp/dbo/MainData#Select";
    
  • 确保该架构已经部署到当前BizTalk应用中,业务流程的接收端口对应消息类型匹配该架构

内容的提问来源于stack exchange,提问作者james treinen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 17:24:03