SOAP - Transporte

SOAP não está vinculado a nenhum protocolo de transporte. O SOAP pode ser transportado via SMTP, FTP, MQSeries da IBM ou Microsoft Message Queuing (MSMQ).

A especificação SOAP inclui detalhes apenas sobre HTTP. O HTTP continua sendo o protocolo de transporte SOAP mais popular.

SOAP via HTTP

Logicamente, as solicitações SOAP são enviadas por meio de uma solicitação HTTP e as respostas SOAP são retornadas dentro do conteúdo da resposta HTTP. Embora as solicitações SOAP possam ser enviadas por meio de um HTTP GET, a especificação inclui detalhes apenas no HTTP POST.

Além disso, tanto as solicitações quanto as respostas HTTP são necessárias para definir seu tipo de conteúdo como text / xml.

A especificação SOAP determina que o cliente deve fornecer um cabeçalho SOAPAction, mas o valor real do cabeçalho SOAPAction depende da implementação do servidor SOAP.

Por exemplo, para acessar o serviço de tradução do AltaVista BabelFish, hospedado por XMethods, você deve especificar o seguinte como um cabeçalho SOAPAction.

urn:xmethodsBabelFish#BabelFish

Mesmo se o servidor não exigir um cabeçalho SOAPAction completo, o cliente deve especificar uma string vazia ("") ou um valor nulo. Por exemplo -

SOAPAction: ""
SOAPAction:

Aqui está um exemplo de solicitação enviado via HTTP para o serviço de tradução 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>

Observe o tipo de conteúdo e o cabeçalho SOAPAction. Observe também que o método BabelFish requer dois parâmetros String. O modo de tradução en_fr traduz do inglês para o francês.

Aqui está a resposta 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>

As respostas SOAP entregues via HTTP devem seguir os mesmos códigos de status HTTP. Por exemplo, um código de status de 200 OK indica uma resposta bem-sucedida. Um código de status 500 Internal Server Error indica que há um erro no servidor e que a resposta SOAP inclui um elemento Fault.