SOAP 是一种传输协议吗?如果是,您能否解释一下如果它依赖于其他应用程序协议(如 HTTP 和 SMTP),如何将其定义为传输协议?
答案1
SOAP 不是传输协议。SOAP 是一种应用层协议,它依赖于其他应用层协议(最常见的是 HTTP)来传输它。(OSI 模型中的应用层为 5-7 层,SOAP 通常被视为第 7 层的一部分。)
TCP 等传输协议更关注通过流量控制、错误检查、保证传送来传输数据的可靠性。
答案2
SOAP 是一种消息传递协议。通常,它位于 HTTP 消息传递协议之上,但其他消息传递传输也是可能的(例如 MQ 等)。虽然 SOAP 和 HTTP 都是属于应用 OSI 层的协议,但从 SOAP 消息的角度来看,HTTP 只是一种“传输”(不要与传输 OSI 层混淆)。
WSDL(Web 服务描述语言)区分两种消息样式:文档和 RPC。消息样式会影响 SOAP Body 的内容:
文档样式:SOAP 主体包含一个或多个子元素(称为部分)。主体包含的内容没有 SOAP 格式规则;它包含发送者和接收者同意的内容。
RPC 样式:RPC 意味着 SOAP 主体包含一个元素,该元素具有被调用方法或操作的名称。该元素又包含该方法/操作的每个参数的元素。
对于使用序列化/反序列化来抽象数据线格式的应用程序,还有一种选择:序列化格式。有两种流行的序列化格式:
SOAP 编码:
SOAP 编码是一组序列化规则。这些规则指定了对象、结构、数组和对象图应如何序列化。一般来说,使用 SOAP 编码的应用程序专注于远程过程调用,并且可能会使用 RPC 消息样式。当使用 SOAP 编码时,SOAP 消息中包含数据类型信息。由于每个参数的数据类型都用参数来表示,因此序列化(数据转换)更加容易。
文字:数据根据模式进行序列化。实际上,此模式通常使用 W3C XML 模式表示。SOAP 消息不直接包含任何数据类型信息,只包含对所用模式的引用(命名空间)。要执行正确的序列化(数据转换),发送者和接收者都必须知道模式,并且必须使用相同的规则来转换数据。