BizTalk技术问询:共享带提升属性的架构并继承保留属性
BizTalk统一消息结构+保留Header提升属性的实操方案
嘿,这个需求我之前在几个BizTalk项目里都碰到过,完全能搞定!而且这样的架构设计还能大大降低后续维护成本,下面是我亲测有效的步骤:
1. 先搞定带提升属性的通用Header架构
首先单独建一个CommonHeader.xsd架构,把所有需要用于路由、日志的字段(比如MessageID、SourceSystem、Timestamp这些)都定义在这里。然后给每个字段设置提升属性:
- 选中Header下的每个字段,在右侧属性面板找到
Promote,选择Promote Properties - 建议专门建一个
CommonProperties.xsd属性架构来统一管理这些提升属性,别跟业务属性混在一起,方便后续维护
这里要注意:这个Header架构就做单一职责,别加其他内容,它就是个可重用的“组件”。
2. 搭建统一的消息基架构
接下来创建一个BaseMessage.xsd,这就是你要的统一消息骨架:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:hdr="http://YourCompany/CommonHeader" targetNamespace="http://YourCompany/BaseMessage"> <xs:import namespace="http://YourCompany/CommonHeader" schemaLocation="CommonHeader.xsd"/> <xs:element name="BaseMessage"> <xs:complexType> <xs:sequence> <xs:element ref="hdr:Header"/> <!-- 直接引用做好的Header --> <xs:element name="Body" type="xs:anyType"/> <!-- 留空让业务消息填充 --> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
这个基架构的作用就是把Header和Body的结构固定下来,后续所有业务消息都基于它来扩展。
3. 生成业务消息架构的两种方法
现在要做具体的业务消息(比如订单消息、库存消息),两种方式都能完美保留Header的提升属性:
方法一:用DataStructure快速继承
- 新建一个空白架构,在属性面板找到
DataStructure,选择我们刚做的BaseMessage - 架构会自动生成BaseMessage的完整结构,你只需要把默认的
Body节点替换成你的业务结构就行(比如把Body改成包含OrderID、CustomerName的复杂类型) - 划重点:别删掉原来的Body节点,直接修改它的内容,确保Header节点完整保留,这样提升属性才会跟着继承过来
方法二:手动引用基架构扩展
如果觉得DataStructure不够灵活,也可以手动在业务架构里导入基架构,然后自定义Body:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:base="http://YourCompany/BaseMessage" xmlns:order="http://YourCompany/OrderMessage" targetNamespace="http://YourCompany/OrderMessage"> <xs:import namespace="http://YourCompany/BaseMessage" schemaLocation="BaseMessage.xsd"/> <xs:element name="OrderMessage"> <xs:complexType> <xs:sequence> <xs:element ref="base:Header"/> <!-- 直接复用带提升属性的Header --> <xs:element name="Body"> <!-- 这里放你的业务Body内容 --> <xs:complexType> <xs:sequence> <xs:element name="OrderID" type="xs:string"/> <xs:element name="CustomerName" type="xs:string"/> <xs:element name="OrderAmount" type="xs:decimal"/> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
4. 验证提升属性是否生效
做完架构后,别忘验证一下:
- 打开BizTalk管理控制台,找到你的业务消息架构,查看它的提升属性,会发现Header的所有字段都已经同步过来了
- 发一条测试消息,用BizTalk的跟踪工具(比如Administration Console里的Tracking)查看,能看到Header的提升属性被正确提取,不管是路由规则还是日志组件都能直接用这些属性
几个避坑提醒
- 别随便改Header架构的命名空间和元素名称,不然继承的时候提升属性会丢失
- 所有业务消息必须严格保留Header的结构,不能乱加或删字段,否则会导致提升属性识别失败
- 后续要加Header字段的话,直接改
CommonHeader.xsd和对应的属性架构,所有业务消息会自动同步这个变化,不用一个个改业务架构
这样设计下来,既能保证内部消息结构统一,又能让Header的提升属性在所有业务消息里正常工作,路由和日志都能直接用这些属性,省心很多!
内容的提问来源于stack exchange,提问作者Patrick
相关产品推荐
相关产品推荐

