WCF-SQL适配器TypedPolling架构构建警告与运行报错咨询
解决方案:WCF-SQL TypedPolling 消息拆分正确配置方案
当然可以完美实现这个场景,完全不需要容忍构建警告!你遇到的问题核心是架构拆分属性的配置细节没匹配好——尤其是Body XPath的命名空间引用错误,以及Root Reference设置后的文档规范注册问题,下面一步步帮你修正:
一、错误原因拆解
- 构建警告BEC1008:你之前设置的
Body XPath = TypedPolling-TypedPollingResultSet0是简化的节点路径,BizTalk的架构解析器需要带命名空间的完整XPath才能准确识别节点,短名路径会导致它找不到对应节点,从而抛出警告。 - 运行时文档规范错误:当你把根节点的Root Reference设为TypedPolling后,拆分出的单条消息类型指向的是内层的
TypedPollingResultSet0节点,但这个节点没有被标记为可独立识别的文档根节点,BizTalk找不到对应的文档规范,因此报错。
二、正确的架构配置步骤
假设你的架构命名空间是http://schemas.microsoft.com/sql/2008/05/TypedPolling/YourSchemaName(替换成你实际的命名空间),按以下步骤修改:
1. 配置根节点(TypedPolling)
选中根节点TypedPolling,在属性窗口设置:
Envelope = YesRoot Reference = TypedPolling(这是信封架构的核心标识)
2. 配置中间包裹节点(TypedPollingResultSet0,父节点)
这是包裹所有查询结果的节点,需要设置Body XPath来指定拆分的起始位置:
选中这个TypedPollingResultSet0节点,在属性窗口设置:
Body XPath = /*[local-name()='TypedPolling' and namespace-uri()='http://schemas.microsoft.com/sql/2008/05/TypedPolling/YourSchemaName']/*[local-name()='TypedPollingResultSet0' and namespace-uri()='http://schemas.microsoft.com/sql/2008/05/TypedPolling/YourSchemaName']Min Occurs = 0,Max Occurs = 1
3. 配置单条数据节点(内层TypedPollingResultSet0)
这是你要拆分出的单条消息的结构,需要标记为独立的文档根:
选中最内层的TypedPollingResultSet0节点(每条数据的节点),在属性窗口设置:
Min Occurs = 0,Max Occurs = unboundedRoot Reference = TypedPollingResultSet0(让BizTalk将这个节点视为独立的文档架构,生成对应的消息类型)
4. 保存并重新部署架构
完成以上配置后,重新编译并部署你的BizTalk项目,此时构建时的BEC1008警告会完全消失。
三、运行时验证
部署完成后,确保:
- 接收端口使用
XMLReceive管道,无需额外配置 - 入站映射的目标节点指向内层的
TypedPollingResultSet0节点(也就是你标记为Root Reference的那个节点)
此时WCF-SQL适配器获取的多条数据会被XMLReceive管道正确拆分为单条消息,每个消息对应一条数据库记录,完全符合你的需求。
内容的提问来源于stack exchange,提问作者JERKER
相关产品推荐
相关产品推荐

