programmera.net -> webservice -> normal     för utskrift      info@programmera.net

SOAP binding för WSDL 1.1

1. WSDL och SOAP
2. The Calculator example
3. binding
4. soap:binding
5. soap:operation
6. soap:body

1. WSDL och SOAP

En av de mest populära nätverksprotokollen för webbtjänster är SOAP. Nedan beskrivs den generella syntaxen för hur man kan binda SOAP till en webbtjänst i WSDL-filen.

<definitions .... >
    <binding .... >
        <soap:binding style="rpc|document" transport="uri">
        <operation .... >
           <soap:operation soapAction="uri"? style="rpc|document"?>?
           <input>
               <soap:body parts="nmtokens"? use="literal|encoded"
                          encodingStyle="uri-list"? namespace="uri"?>
               <soap:header message="qname" part="nmtoken" use="literal|encoded"
                            encodingStyle="uri-list"? namespace="uri"?>*
                 <soap:headerfault message="qname" part="nmtoken" use="literal|encoded"
                                   encodingStyle="uri-list"? namespace="uri"?/>*
               <soap:header>                                
           </input>
           <output>
               <soap:body parts="nmtokens"? use="literal|encoded"
                          encodingStyle="uri-list"? namespace="uri"?>
               <soap:header message="qname" part="nmtoken" use="literal|encoded"
                            encodingStyle="uri-list"? namespace="uri"?>*
                 <soap:headerfault message="qname" part="nmtoken" use="literal|encoded"
                                   encodingStyle="uri-list"? namespace="uri"?/>*
               <soap:header>                                
           </output>
           <fault>*
               <soap:fault name="nmtoken" use="literal|encoded"
                           encodingStyle="uri-list"? namespace="uri"?>
            </fault>
        </operation>
    </binding>

    <port .... >
        <soap:address location="uri"/> 
    </port>
</definitions>

2. The Calculator example

I exemplet Calculator.wsdl binds portType-elementet mot SOAP över HTTP. I vårt exempel ser koden ut såhär:

  <binding name="CalculatorSoapBinding" type="tns:CalculatorPortType">
    <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
    <operation name="multiplication">
      <soap:operation soapAction="http://www.your_domain.com/axis/services/Calculator/Multiplication"/>
      <input>
        <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" 
                 namespace="http://www.your_domain.com/ns/Calculator.xsd" />
      </input>
      <output>
        <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" 
                 namespace="http://www.your_domain.com/ns/Calculator.xsd" />
      </output>
    </operation>
    <operation name="division">
      <soap:operation soapAction="http://www.your_domain.com/axis/services/Calculator/Division"/>
      <input>
        <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" 
                 namespace="http://www.your_domain.com/ns/Calculator.xsd" />
      </input>
      <output>
        <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" 
                 namespace="http://www.your_domain.com/ns/Calculator.xsd" />
      </output>
      <fault>
        <soap:fault use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" 
                 namespace="http://www.your_domain.com/ns/Calculator.xsd" />
      </fault>
    </operation>
  </binding>

3. binding

Själva binding-elementet har följande attribut:

Attribut för binding Beskrivning
name  Elementets namn, ska vara unikt bland binding-elementen i WSDL-filen.
type  Detta attribut mappar elementet till en portType.

4. soap:binding

binding-elementet innehåller ett transportspecifikt element som för SOAP heter soap:binding och som har följande attribut:

Attribut för soap:binding defaultvärde Beskrivning
transport  -  Detta attribut bestämmer vilket transportprotokoll som ska användas. För http://schemas.xmlsoap.org/soap/http kommer HTTP att användas, men om URI hade slutat på t.ex. smpt hade SMTP använts.
style  document  Detta attribut kan anta rpc eller document. rpc innebär att dokumentet är rpc-orienterat där ett meddelande innehåller parametrar och returvärden. document innebär att meddelandena innehåller dokument.

5. soap:operation

operation-elementet innehåller ett transportspecifikt element som för SOAP heter soap:operation och som har följande attribut:

Attribut för soap:operation defaultvärde Beskrivning
soapAction  -  Detta attribut bestämmer värdet för HTTP-headerparametern SOAPAction för denna operation. Detta attribut måste anges, men det är inte så viktigt vad man knuffar in eftersom det bara rör sig om var man kan hitta en beskrivning av operationen. Om man skickar tomma strängen som soapAction betyder detta att man kan hitta meddelandets syfte på samma URI som själva meddelandet.
style  samma som soap:binding  Detta behöver inte anges om du vill behålla värdet du angav i soap:binding.

6. soap:body

input och output-elementen innehåller ett transportspecifikt element som för SOAP heter soap:body. Detta element har till syfte att bestämma hur meddelandet ska se ut inuti SOAP Body-elementet. Det viktigaste attributet för soap:body är use som bestämmer hur de element som skickas ska tolkas. use kan bara anta två väden:

  • use="literal": I detta fall skickas meddelandet precis som det är definierat och man hoppas på att den som tar emot meddelandet ska förstå och kunna tolka taggarna så som de ser ut. literal är vanligast om man kör dokumentorienterade meddelanden.
  • use="encoded": I detta fall refererar alla part-element i meddelandet till abstrakta datatyper m.h.a. type-attributet. Dessa datatyper kodas efter den kodningsmetod som anges med attributet encodingStyle ( attributet encodingStyle måste sättas i detta fall). encoded är vanligast om man har rpc-orienterade meddelanden.


Attribut för soap:body Beskrivning
use  Detta attribut bestämmer om parametrarna ska kodas eller skickas som de är. Om vi har use=encoded ska vi också sätta attributen encodingStyle.
encodingStyle  Måste sättas om du kör use=encoded. Vanligaste kodningen är http://schemas.xmlsoap.org/soap/encoding/ .
namespace  Namnutrymme.