SOAP - Transporte

SOAP no está vinculado a ningún protocolo de transporte. SOAP se puede transportar a través de SMTP, FTP, IBM MQSeries o Microsoft Message Queue Server (MSMQ).

La especificación SOAP incluye detalles sobre HTTP únicamente. HTTP sigue siendo el protocolo de transporte SOAP más popular.

SOAP a través de HTTP

Lógicamente, las solicitudes SOAP se envían a través de una solicitud HTTP y las respuestas SOAP se devuelven dentro del contenido de la respuesta HTTP. Si bien las solicitudes SOAP se pueden enviar a través de HTTP GET, la especificación solo incluye detalles sobre HTTP POST.

Además, se requieren tanto las solicitudes como las respuestas HTTP para establecer su tipo de contenido en texto / xml.

La especificación SOAP exige que el cliente debe proporcionar un encabezado SOAPAction, pero el valor real del encabezado SOAPAction depende de la implementación del servidor SOAP.

Por ejemplo, para acceder al servicio de traducción de AltaVista BabelFish, alojado por XMethods, debe especificar lo siguiente como un encabezado SOAPAction.

urn:xmethodsBabelFish#BabelFish

Incluso si el servidor no requiere un encabezado SOAPAction completo, el cliente debe especificar una cadena vacía ("") o un valor nulo. Por ejemplo

SOAPAction: ""
SOAPAction:

Aquí hay una solicitud de muestra enviada a través de HTTP al servicio de traducción Babelfish de 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>

Tenga en cuenta el tipo de contenido y el encabezado SOAPAction. También tenga en cuenta que el método BabelFish requiere dos parámetros de cadena. El modo de traducción en_fr traduce del inglés al francés.

Aquí está la respuesta de 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>

Las respuestas SOAP entregadas a través de HTTP deben seguir los mismos códigos de estado HTTP. Por ejemplo, un código de estado 200 OK indica una respuesta exitosa. Un código de estado 500 Internal Server Error indica que hay un error del servidor y que la respuesta SOAP incluye un elemento Fault.