- SOAP 教程
- SOAP - 主页
- SOAP - 什么是 SOAP?
- SOAP - 消息
- SOAP - 信封
- SOAP - 头部
- SOAP - 正文
- SOAP - 故障
- SOAP - 编码
- SOAP - 传输
- SOAP - 示例
- SOAP - 标准
- SOAP 资源
- SOAP - 快速指南
- SOAP - 有用资源
- SOAP - 讨论
SOAP - 传输
SOAP 不绑定至任何传输协议。SOAP 可通过 SMTP、FTP、IBM 的 MQSeries 或 Microsoft Message Queuing (MSMQ) 传输。
SOAP 规范仅包含 HTTP 的详情。HTTP 仍然是最流行的 SOAP 传输协议。
通过 HTTP 的 SOAP
相当具有逻辑性,SOAP 请求通过 HTTP 请求发送,SOAP 响应在 HTTP 响应内容中返回。虽然可以 SOAP 请求通过 HTTP GET 发送,但此规范仅包含 HTTP POST 的详情。
此外,HTTP 请求和响应都需要将其内容类型设置为 text/xml。
SOAP 规范要求客户端必须提供一个SOAPAction 头部,但 SOAPAction 头部的实际值取决于 SOAP 服务器的实现。
例如,要访问 XMethods 托管的 AltaVista BabelFish 翻译服务,您必须将以下项指定为 SOAPAction 头部。
urn:xmethodsBabelFish#BabelFish
即使服务器不需要完整的 SOAPAction 头部,客户端也必须指定一个空字符串 (“”) 或空值。例如 −
SOAPAction: "" SOAPAction:
以下是通过 HTTP 发送至 XMethods Babelfish 翻译服务的一个示例请求 −
POST /perl/soaplite.cgi HTTP/1.0 Host: services.xmethods.com Content-Type: text/xml; charset = utf-8 Content-Length: 538 SOAPAction: "urn:xmethodsBabelFish#BabelFish" <?xml version = '1.0' encoding = 'UTF-8'?> <SOAP-ENV:Envelope xmlns:SOAP-ENV = "http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi = "http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd = "http://www.w3.org/1999/XMLSchema"> <SOAP-ENV:Body> <ns1:BabelFish xmlns:ns1 = "urn:xmethodsBabelFish" SOAP-ENV:encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/"> <translationmode xsi:type = "xsd:string">en_fr</translationmode> <sourcedata xsi:type = "xsd:string">Hello, world!</sourcedata> </ns1:BabelFish> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
请注意内容类型和 SOAPAction 头部。另外请注意,BabelFish 方法需要两个 String 参数。翻译模式 en_fr 将从英语翻译成法语。
以下是 XMethods 的响应 −
HTTP/1.1 200 OK Date: Sat, 09 Jun 2001 15:01:55 GMT Server: Apache/1.3.14 (Unix) tomcat/1.0 PHP/4.0.1pl2 SOAPServer: SOAP::Lite/Perl/0.50 Cache-Control: s-maxage = 60, proxy-revalidate Content-Length: 539 Content-Type: text/xml <?xml version = "1.0" encoding = "UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENC = "http://schemas.xmlsoap.org/soap/encoding/" SOAP-ENV:encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi = "http://www.w3.org/1999/XMLSchema-instance" xmlns:SOAP-ENV = "http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd = "http://www.w3.org/1999/XMLSchema"> <SOAP-ENV:Body> <namesp1:BabelFishResponse xmlns:namesp1 = "urn:xmethodsBabelFish"> <return xsi:type = "xsd:string">Bonjour, monde!</return> </namesp1:BabelFishResponse> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
通过 HTTP 传递的 SOAP 响应需要遵循相同的 HTTP 状态代码。例如,状态代码 200 OK 表示成功响应。状态代码 500 Internal Server Error 表示存在服务器错误,SOAP 响应包含一个 Fault 元素。
广告