SOAP协议以XML为唯一载体,所有消息必须是格式良好、符合规范的XML文档,包含Envelope(根元素)、Header(可选)、Body(必需)和Fault(可选)四部分,依赖XML Schema实现强类型、自描述与扩展性。

SOAP协议完全依赖XML,它不是“用XML辅助”,而是“以XML为唯一载体”——所有SOAP消息必须是格式良好、符合规范的XML文档。没有XML,SOAP就不存在。
SOAP本质上就是XML文档
SOAP消息不是二进制流,也不是JSON或纯文本,它是一份严格遵循语法规则的XML文件。这意味着:
- 必须有正确的根元素(Envelope),且大小写敏感、标签闭合完整;
- 所有嵌套结构靠XML层级表达,比如
在内,也在同一级; - 任何系统只要能解析XML,就能读取SOAP内容——这是跨语言、跨平台互操作的根本前提。
SOAP消息的四个核心部分
一个标准SOAP消息由以下结构组成,全部用XML元素实现:
-
Envelope:必需的根元素,标识整个文档为SOAP消息,并可声明命名空间(如
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"); - Header(可选):用于携带非业务信息,如身份认证令牌、事务ID、路由指令等,不参与业务逻辑但影响消息处理流程;
-
Body:必需,承载实际调用的方法名、参数或返回结果,例如
;101 - Fault(可选,位于Body内):当服务端出错时,用标准化的XML结构返回错误码、原因和建议,便于客户端统一解析处理。
为什么必须用XML,不能换其他格式?
SOAP的设计目标决定了它离不开XML:
- 强类型与结构化:XML Schema(XSD)可精确约束每个字段的数据类型、是否必填、嵌套关系,让接口契约可验证;
-
自描述性:标签名本身传递语义(如
),无需额外文档也能被理解;99.99 - 扩展性支撑:WS-Security、WS-Addressing等企业级扩展,都通过在Header中插入特定命名空间的XML块来实现;
- 工具链成熟:WSDL文件本身就是XML,它用XML描述服务接口,再由工具自动生成客户端代码——整条链路都建立在XML之上。
一个最简SOAP请求示例
假设调用GetUserInfo方法,传入用户ID为123:
注意:所有内容都是XML,连命名空间、前缀、缩进都属于XML语法的一部分,不可省略或随意更改。










