2009-04-10 59 views

Respuesta

40

SOAP 1.1 utiliza espacio de nombres http://schemas.xmlsoap.org/wsdl/soap/

SOAP 1.2 utiliza espacio de nombres http://schemas.xmlsoap.org/wsdl/soap12/

el WSDL es capaz de definir las operaciones bajo jabón 1,1 y jabón 1.2 al mismo tiempo en el mismo WSDL. Eso es útil si necesita evolucionar su wsdl para admitir una nueva funcionalidad que requiera jabón 1.2 (por ejemplo, MTOM), en este caso no necesita crear un nuevo servicio sino simplemente evolucionar el original.

+1

MTOM se puede usar con soap1.1 – GregD

4

Sí, normalmente puede ver qué versión de SOAP es compatible con WSDL.

Eche un vistazo a Demo web service WSDL. Tiene una referencia al espacio de nombres soap12 que indica que es compatible con SOAP 1.2. Si eso no existiera, probablemente estaría seguro si el servicio solo admitiera SOAP 1.1.

+0

La referencia del espacio de nombres soap12 es un buen indicador. Pero si falta, todavía puede ser un servicio web SOAP 1.2: el WSDL de ejemplo en http://en.wikipedia.org/wiki/Web_Services_Description_Language als no tiene esta referencia, pero tal vez contenga algo más que es típico de SOAP 1.2? – mjn

2

Se ha encontrado el atributo de transporte en binding-element que nos dice que este es el enlace WSDL 1.1 para el enlace HTTP de SOAP 1.1.

ex.

<wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> 
18

En WSDL, si mira la sección Encuadernación, verá claramente que la vinculación de jabón se menciona explícitamente si el servicio utiliza jabón 1.2. consulte la muestra a continuación.

<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> 

si el servicio web utiliza soap 1.1, no definirá explícitamente ninguna versión de jabón en el archivo WSDL en la sección de enlace. consulte la muestra a continuación.

<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> 

cómo determinar la versión de SOAP del mensaje SOAP?

pero recuerde que esta no es una forma muy recomendable de determinar la versión de jabón que utilizan sus servicios web. la versión del mensaje de jabón se puede determinar utilizando una de las siguientes formas.

1. comprobar el espacio de nombres del mensaje SOAP

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

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

2. comprobar la información de enlace de transporte (información del encabezado HTTP) del mensaje de jabón

de SOAP 1.1: el usuario text/xml para el Contexto-Tipo

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

SOAP 1.2: usuario de la aplicación/jabón + xml para el Contexto-Tipo

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

3. utilizando la información de error de SOAP

La estructura de un mensaje de error SOAP entre las dos versiones es diferente.

+5

La primera parte de su respuesta podría usar cierta información adicional: el "soap12" es el prefijo del espacio de nombres, no el espacio de nombres en sí. Debe verificar a qué se resuelve el prefijo "soap12" y qué versión de jabón especifica. Alguien podría usar soap12 como prefijo pero señalar el URI del espacio de nombres soap11. – csadler

Cuestiones relacionadas