SOAP - Giao thông vận tải

SOAP không bị ràng buộc với bất kỳ giao thức truyền tải nào. SOAP có thể được vận chuyển qua SMTP, FTP, MQSeries của IBM hoặc Hàng đợi Thư của Microsoft (MSMQ).

Đặc tả SOAP chỉ bao gồm chi tiết về HTTP. HTTP vẫn là giao thức truyền tải SOAP phổ biến nhất.

SOAP qua HTTP

Về mặt logic, các yêu cầu SOAP được gửi qua một yêu cầu HTTP và các phản hồi SOAP được trả lại trong nội dung của phản hồi HTTP. Mặc dù yêu cầu SOAP có thể được gửi qua HTTP GET, nhưng thông số kỹ thuật chỉ bao gồm các chi tiết về HTTP POST.

Ngoài ra, cả yêu cầu và phản hồi HTTP đều được yêu cầu để đặt loại nội dung của chúng thành văn bản / xml.

Đặc tả SOAP bắt buộc máy khách phải cung cấp tiêu đề SOAPAction, nhưng giá trị thực của tiêu đề SOAPAction phụ thuộc vào việc triển khai máy chủ SOAP.

Ví dụ: để truy cập dịch vụ AltaVista BabelFish Dịch, do XMethods lưu trữ, bạn phải chỉ định phần sau làm tiêu đề SOAPAction.

urn:xmethodsBabelFish#BabelFish

Ngay cả khi máy chủ không yêu cầu tiêu đề SOAPAction đầy đủ, máy khách phải chỉ định chuỗi trống ("") hoặc giá trị null. Ví dụ -

SOAPAction: ""
SOAPAction:

Đây là một yêu cầu mẫu được gửi qua HTTP tới dịch vụ Dịch thuật Babelfish của XMethods -

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>

Lưu ý loại nội dung và tiêu đề SOAPAction. Cũng lưu ý rằng phương thức BabelFish yêu cầu hai tham số Chuỗi. Chế độ dịch en_fr dịch từ tiếng Anh sang tiếng Pháp.

Đây là phản hồi từ 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>

Các phản hồi SOAP được gửi qua HTTP bắt buộc phải tuân theo các mã trạng thái HTTP giống nhau. Ví dụ, mã trạng thái 200 OK cho biết phản hồi thành công. Mã trạng thái 500 Lỗi máy chủ nội bộ chỉ ra rằng có lỗi máy chủ và phản hồi SOAP bao gồm phần tử Lỗi.