SOAP报文是格式严格的XML文档,核心由Envelope(必需根元素)、Header(可选,含认证等元数据)和Body(必需,含业务数据及Fault错误信息)构成,须遵循XML规范与命名空间要求。

SOAP报文就是一条格式严格的XML文档,用来在不同系统之间安全、可靠地传递结构化数据。它不依赖具体编程语言或操作系统,只靠XML语法和约定的结构就能实现跨平台通信。
核心三要素:Envelope、Header、Body
每个SOAP消息必须有且仅有一个根元素 soap:Envelope,它是整条消息的“信封”,标识这是一条合法的SOAP消息。里面最多包含两个直接子元素:
- soap:Header(可选):放认证信息、事务ID、路由指令等中间节点需要处理的内容。比如用户名密码、数字签名、超时设置,都可放在这里;没用到就完全可以省略。
- soap:Body(必需):真正要传达的业务内容,比如调用什么方法、传了哪些参数、返回了什么结果。所有实际请求或响应的数据都在这里。
Fault错误信息统一放在Body里
当服务端处理出错时,不会另起一套机制报错,而是直接在 soap:Body 内部嵌一个 soap:Fault 元素。它不是独立顶层标签,而是Body的子元素之一,结构固定,至少包含四个标准子项:
-
faultcode:错误类型编码,如
soap:Server表示服务端内部异常 - faultstring:人类可读的错误描述
- faultactor:出问题的服务环节(可选)
- detail:面向开发者的详细上下文,比如数据库报错堆栈(可选)
命名空间和XML基础不能错
SOAP消息必须是格式良好的XML,这意味着:
- 所有标签必须闭合,大小写敏感,嵌套正确
- 必须声明正确的命名空间,最常见的是:
- 不能出现XML处理指令(如
)——虽然很多工具会自动加,但严格来说SOAP规范禁止它出现在Envelope之前 - Body里不能混用HTML标签或非法字符,所有内容需转义(如
&代替&)
一个真实可用的简化示例
这是调用登录接口的典型请求报文(已去除多余空格和注释,可直接用于测试):
注意命名空间前缀(soap:)、自定义命名空间(xmlns="...")、以及Header与Body的层级关系——这些细节一旦写错,服务端通常直接拒收,连错误提示都不给。
基本上就这些。不复杂但容易忽略。










