BizTalk中SQL发送端口升级为WCF-SQL端口的Schema复用问题
BizTalk SQL发送端口升级为WCF-SQL:复用旧Schema的可行性及错误解决
能否直接复用原SQL端口的旧Schema?
不行。原SQL端口的Schema依赖msbtssql:sqlScript注解实现旧式SQL执行逻辑,而WCF-SQL适配器对消息结构、Schema的要求完全不同——它需要基于SQL操作的强类型XML格式,和旧Schema的输出不兼容,没法直接复用。
错误原因
你设置的SOAP Action是Procedure/dbo/InsertUnitLoad,明确要调用存储过程,但当前传入的XML根节点是<Request xmlns="BCA.Integration.Unit.SQL">,这和WCF-SQL要求的结构对不上。WCF-SQL调用存储过程时,期望的XML结构应该是这样的:
<InsertUnitLoad xmlns="http://schemas.microsoft.com/Sql/2008/05/Procedures/dbo"> <Id>参数值</Id> <DateReg>参数值</DateReg> <DivisionCode>参数值</DivisionCode> <ODS>参数值</ODS> <Reg>参数值</Reg> </InsertUnitLoad>
核心问题有两个:
- 根节点名称必须和存储过程名
InsertUnitLoad一致,不能是旧Schema的Request - 命名空间必须是WCF-SQL固定的
http://schemas.microsoft.com/Sql/2008/05/Procedures/dbo,而非旧的BCA.Integration.Unit.SQL
解决办法
- 用映射转换消息结构
不用重新生成Schema,但得做个BizTalk映射,把旧Schema输出的<Request>消息转换成WCF-SQL需要的格式:- 把根节点改成
InsertUnitLoad - 替换命名空间为
http://schemas.microsoft.com/Sql/2008/05/Procedures/dbo - 保证每个参数节点的名称和存储过程的参数名完全匹配
- 把根节点改成
- 调整发送端口配置
- SOAP Action保持
Procedure/dbo/InsertUnitLoad不变 - 发送端口的消息类型要指向映射后的目标结构(如果嫌麻烦,也可以直接用WCF-SQL适配器自动生成的Schema)
- SOAP Action保持
- 提前验证消息格式
发测试消息前先检查XML结构,确保根节点和命名空间都符合要求,避免再触发相同错误
内容的提问来源于stack exchange,提问作者Kyle Mann
相关产品推荐
相关产品推荐

