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.