Um WSDL pode indicar a versão SOAP (1.1 ou 1.2) do serviço web?

é possível ver se um serviço web usa o SOAP 1.1 ou 1.2, com base nas informações do WSDL?

Author: mjn, 2009-04-10

5 answers

O SOAP 1.1 usa espaços de nomes http://schemas.xmlsoap.org/wsdl/soap/

O SOAP 1.2 usa espaços de nomes http://schemas.xmlsoap.org/wsdl/soap12/

O wsdl é capaz de definir as operações sob o soap 1.1 e o soap 1.2 ao mesmo tempo no mesmo wsdl. Isso é útil se você precisar evoluir o seu wsdl para suportar uma nova funcionalidade que requer o soap 1.2 (eg. MTOM), neste caso você não precisa criar um novo serviço, mas apenas evoluir o original.

 49
Author: jmhostalet, 2013-09-23 20:53:41

No WSDL, se olhar para a Secção de ligação, verá claramente que a ligação do sabão é explicitamente mencionada se o Serviço utilizar o Sabonetes 1.2. consulte a amostra abaixo.

<binding name="EmployeeServiceImplPortBinding" type="tns:EmployeeServiceImpl">
<soap12:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
<operation name="findEmployeeById">
    <soap12:operation soapAction=""/>
    <input><soap12:body use="literal"/></input>
    <output><soap12:body use="literal"/></output>
</operation><operation name="create">
    <soap12:operation soapAction=""/>
    <input><soap12:body use="literal"/></input>
    <output><soap12:body use="literal"/></output>
</operation>
</binding>

Se o serviço web usar o soap 1.1, não irá definir explicitamente nenhuma versão soap no ficheiro WSDL sob a secção binding. consulte a amostra abaixo.

<binding name="EmployeeServiceImplPortBinding" type="tns:EmployeeServiceImpl">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="rpc"/>
<operation name="findEmployeeById">
    <soap:operation soapAction=""/>
    <input><soap:body use="literal" namespace="http://jaxb.ws.jax.samples.chathurangaonline.com/"/></input>
    <output><soap:body use="literal" namespace="http://jaxb.ws.jax.samples.chathurangaonline.com/"/></output>
</operation><operation name="create">
    <soap:operation soapAction=""/>
    <input><soap:body use="literal" namespace="http://jaxb.ws.jax.samples.chathurangaonline.com/"/></input>
    <output><soap:body use="literal" namespace="http://jaxb.ws.jax.samples.chathurangaonline.com/"/></output>
</operation>
</binding>

Como determinar a versão de sabão da mensagem de sabão?

Mas lembre-se que esta não é uma forma muito recomendada de determine a versão soap que seus serviços web usam. a versão da mensagem soap pode ser determinada usando uma das seguintes maneiras.

1. a verificar o espaço de nomes da mensagem soap

SOAP 1.1  namespace : http://schemas.xmlsoap.org/soap/envelope

SOAP 1.2 namespace  : http://www.w3.org/2003/05/soap-envelope

2. verificar a informação de ligação ao transporte (Informação do cabeçalho http) da mensagem soap

SOAP 1.1: texto do utilizador / xml para o tipo de contexto

   POST /MyService HTTP/1.1
   Content-Type: text/xml; charset="utf-8"
   Content-Length: xxx
   SOAPAction: "urn:uuid:myaction"

SOAP 1.2: aplicação do utilizador / soap+xml para o tipo de contexto

   POST /MyService HTTP/1.1
   Content-Type: application/soap+xml; charset="utf-8"
   Content-Length: xxx
   SOAPAction: "urn:uuid:myaction"

3. usar sabão informação sobre avarias

A estrutura de uma mensagem de falha de sabão entre as duas versões é diferente.
 25
Author: Chathuranga Tennakoon, 2015-02-08 11:41:05

Encontrei esta página

Http://schemas.xmlsoap.org/wsdl/soap12/soap12WSDL.htm

O que diz que o Soap 1.2 usa o novo espaço de nomes. http://schemas.xmlsoap.org/wsdl/soap12/

Está na extensão de ligação wsdl 1.1 para o SOAP 1.1.

 13
Author: mjn, 2013-01-22 16:35:36

Sim, normalmente pode ver qual a versão do SOAP que é suportada com base no WSDL.

Dê uma olhada emDemo web service WSDL . Ele tem uma referência ao espaço de nomes soap12 indicando que suporta SOAP 1.2. Se isso estivesse ausente, provavelmente estaria seguro assumindo que o serviço só suportava sabão 1.1.

 4
Author: sipwiz, 2009-04-10 06:08:49

Encontrou o transport-atributo no binding-element que nos diz que este é o WSDL 1.1 binding para o SOAP 1.1 HTTP binding.

Ex.

<wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
 2
Author: LilleElefant, 2011-08-25 08:55:24