สบู่ - การขนส่ง
SOAP ไม่ได้เชื่อมโยงกับโปรโตคอลการขนส่งใด ๆ SOAP สามารถขนส่งผ่าน SMTP, FTP, MQSeries ของ IBM หรือ Microsoft Message Queuing (MSMQ)
ข้อกำหนด SOAP ประกอบด้วยรายละเอียดเกี่ยวกับ HTTP เท่านั้น HTTP ยังคงเป็นโปรโตคอลการขนส่ง SOAP ที่ได้รับความนิยมสูงสุด
SOAP ผ่าน HTTP
ค่อนข้างมีเหตุผลคำขอ SOAP จะถูกส่งผ่านคำขอ HTTP และการตอบกลับ SOAP จะถูกส่งกลับภายในเนื้อหาของการตอบสนอง HTTP แม้ว่าคำขอ SOAP จะสามารถส่งผ่าน HTTP GET ได้ แต่ข้อกำหนดจะมีรายละเอียดเกี่ยวกับ HTTP POST เท่านั้น
นอกจากนี้คำขอและการตอบกลับ HTTP จะต้องตั้งค่าประเภทเนื้อหาเป็น text / xml
ข้อกำหนด SOAP กำหนดว่าไคลเอ็นต์ต้องจัดเตรียมส่วนหัว SOAPActionแต่ค่าจริงของส่วนหัว SOAPAction ขึ้นอยู่กับการใช้งานเซิร์ฟเวอร์ SOAP
ตัวอย่างเช่นในการเข้าถึงบริการ AltaVista BabelFish Translation ซึ่งโฮสต์โดย XMethods คุณต้องระบุสิ่งต่อไปนี้เป็นส่วนหัว SOAPAction
urn:xmethodsBabelFish#BabelFish
แม้ว่าเซิร์ฟเวอร์จะไม่ต้องการส่วนหัว SOAPAction แบบเต็ม แต่ไคลเอนต์ต้องระบุสตริงว่าง ("") หรือค่า null ตัวอย่างเช่น -
SOAPAction: ""
SOAPAction:
นี่คือคำขอตัวอย่างที่ส่งผ่าน HTTP ไปยังบริการ XMethods Babelfish Translation -
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>
การตอบสนอง SOAP ที่ส่งผ่าน HTTP จะต้องเป็นไปตามรหัสสถานะ HTTP เดียวกัน ตัวอย่างเช่นรหัสสถานะ 200 OK แสดงถึงการตอบสนองที่ประสบความสำเร็จ รหัสสถานะ 500 Internal Server Error บ่งชี้ว่ามีข้อผิดพลาดของเซิร์ฟเวอร์และการตอบสนอง SOAP มีองค์ประกอบ Fault