Seife - Transport

SOAP ist an kein Transportprotokoll gebunden. SOAP kann über SMTP, FTP, IBMs MQSeries oder Microsoft Message Queuing (MSMQ) transportiert werden.

Die SOAP-Spezifikation enthält nur Details zu HTTP. HTTP bleibt das beliebteste SOAP-Transportprotokoll.

SOAP über HTTP

Ganz logisch werden SOAP-Anforderungen über eine HTTP-Anforderung gesendet und SOAP-Antworten werden innerhalb des Inhalts der HTTP-Antwort zurückgegeben. Während SOAP-Anforderungen über ein HTTP-GET gesendet werden können, enthält die Spezifikation nur Details zum HTTP-POST.

Darüber hinaus sind sowohl HTTP-Anforderungen als auch -Antworten erforderlich, um ihren Inhaltstyp auf text / xml festzulegen.

Die SOAP-Spezifikation schreibt vor, dass der Client einen SOAPAction-Header bereitstellen muss , der tatsächliche Wert des SOAPAction-Headers hängt jedoch von der SOAP-Server-Implementierung ab.

Um beispielsweise auf den von XMethods gehosteten AltaVista BabelFish-Übersetzungsdienst zuzugreifen, müssen Sie Folgendes als SOAPAction-Header angeben.

urn:xmethodsBabelFish#BabelFish

Auch wenn der Server keinen vollständigen SOAPAction-Header benötigt, muss der Client eine leere Zeichenfolge ("") oder einen Nullwert angeben. Zum Beispiel -

SOAPAction: ""
SOAPAction:

Hier ist eine Beispielanforderung, die per HTTP an den XMethods Babelfish Translation Service gesendet wurde:

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>

Beachten Sie den Inhaltstyp und den SOAPAction-Header. Beachten Sie auch, dass für die BabelFish-Methode zwei String-Parameter erforderlich sind. Der Übersetzungsmodus en_fr übersetzt vom Englischen ins Französische.

Hier ist die Antwort von 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>

Über HTTP übermittelte SOAP-Antworten müssen denselben HTTP-Statuscodes folgen. Ein Statuscode von 200 OK zeigt beispielsweise eine erfolgreiche Antwort an. Ein Statuscode von 500 Internal Server Error zeigt an, dass ein Serverfehler vorliegt und dass die SOAP-Antwort ein Fehlerelement enthält.