2009-04-10 4 views

Antwort

40

SOAP 1.1 verwendet Namensraum http://schemas.xmlsoap.org/wsdl/soap/

SOAP 1.2 Namespace verwendet http://schemas.xmlsoap.org/wsdl/soap12/

der WSDL in der Lage, Operationen unter Seife 1.1 und 1.2 Seife zur gleichen Zeit in der gleichen Wsdl zu definieren. Das ist nützlich, wenn Sie Ihre WSDL weiterentwickeln müssen, um neue Funktionen zu unterstützen, die Soap 1.2 (zB MTOM) benötigen. In diesem Fall müssen Sie keinen neuen Dienst erstellen, sondern nur den ursprünglichen entwickeln.

+1

MTOM kann mit soap1.1 verwendet werden – GregD

4

Ja, Sie können normalerweise sehen, welche SOAP-Version basierend auf der WSDL unterstützt wird.

Werfen Sie einen Blick auf Demo web service WSDL. Es hat einen Verweis auf den Soap12-Namespace, der angibt, dass SOAP 1.2 unterstützt wird. Wenn das nicht vorhanden wäre, wäre es wahrscheinlich sicher, dass der Service nur SOAP 1.1 unterstützt.

+0

Die Soap12-Namespace-Referenz ist ein guter Indikator. Aber wenn es fehlt, kann es immer noch ein SOAP 1.2 Web Service sein - das Beispiel WSDL bei http://en.wikipedia.org/wiki/Web_Services_Description_Language als hat diesen Verweis nicht, aber vielleicht enthält es etwas anderes, was typisch für SOAP 1.2? – mjn

2

Gefundenes Transport-Attribut im Bindungselement, das uns mitteilt, dass dies die WSDL 1.1-Bindung für die HTTP-Bindung von SOAP 1.1 ist.

ex.

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

In WSDL, wenn Sie die Binding Abschnitt betrachten, werden Sie deutlich sehen, dass Seife Bindung explizit erwähnt wird, wenn der Dienst Seife 1.2 verwendet. Verweisen Sie auf das folgende Beispiel.

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

, wenn die Web-Service-Anwendung Seife 1.1, es nicht ausdrücklich jegliche Seife Version in der WSDL-Datei unter Bindungsabschnitt definieren. Verweisen Sie auf das folgende Beispiel.

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

Wie die SOAP-Version der SOAP-Nachricht bestimmen?

aber denken Sie daran, dass dies nicht viel empfohlene Möglichkeit ist, die Soap-Version zu ermitteln, die Ihre Webdienste verwenden. Die Version der Soap-Nachricht kann auf eine der folgenden Arten bestimmt werden.

1. Überprüfung der Namensraum des SOAP-Nachricht

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

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

2. die Transportbindungsinformationen (http-Header-Informationen) der Seife Nachricht Überprüfung

SOAP 1.1: user text/xml für die Context-Type

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

SOAP 1.2: user application/soap + xml für die Context-Type

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

3. Verwendung von SOAP-Fehlerinformationen

Die Struktur einer SOAP-Fehlermeldung zwischen den beiden Versionen ist unterschiedlich.

+5

Der erste Teil Ihrer Antwort könnte einige zusätzliche Informationen verwenden - die "soap12" ist das Namespacepräfix, nicht der Namespace selbst. Sie müssen überprüfen, wie das Präfix "soap12" aufgelöst wird und welche Version von soap angibt. Jemand könnte soap12 als Präfix verwenden, aber auf den soap11-Namespace-URI zeigen. – csadler

Verwandte Themen