Web服务互操作性和 SOAP
本文概要说明了在通过 SOAP 进行 RPC 调用时当前实际存在的互操作性问题,同时讨论了导致互操作性问题的三个因素:HTTP 问题、XML 问题和 SOAP 间断性。
如上所示,该请求将方法名编码为 XML :
| public String echoString(String inputString); |
以下是来自服务器的响应:
HTTP/1.1 200 OK <?xml version="1.0" encoding="utf-8"?>
Content-Type: text/xml; charset=utf-8
Content-Length: length
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="http://soapinterop.org/" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<tns:echoStringResponse>
<Return>string</Return>
</tns:echoStringResponse>
</soap:Body>
</soap:Envelope>
常见的互操作性问题
当执行 RPC 形式的 SOAP 消息传送时,可能会因为多种原因导致互操作性问题。有趣的是,许多互操作性问题都不是 SOAP 本身的问题,而是基本传输引擎或 XML 引擎所导致的互操作性问题。也就是说,互操作性问题可能是:
- HTTP 问题
- XML 问题,或
- SOAP 间断性
还应指出的是,这些规范的制定者也有考虑不周的地方,他们有时可能会模棱两可,这样就很难确定唯一正确的行为。
传输问题
XML Web 服务消息的核心在于发送消息的传输机制。当通过 SOAP 进行 RPC 调用时,HTTP 是目前最为常用的传输机制。这意味着 SOAP 堆栈之间必然存在 HTTP 互操作性问题。
HTTP 互操作性问题的一个简单示例就是 SOAPAction 的使用。SOAPAction 是一种 HTTP 标头,它必须存在于通过 HTTP 传送的 SOAP 消息中。此标头可以赋以多个不同的值,例如:
| SOAPAction: http://tempuri.org/ |
- 本文关键词:

