Showing posts with label 06 WSDL Introduction. Show all posts
Showing posts with label 06 WSDL Introduction. Show all posts

Thursday, September 5, 2013

WSDL Introduction


WSDL (Web Services Description Language) Introduction

WSDL is an XML-based language for describing Web services and how to access them.

- WSDL stands for Web Services Description Language
- WSDL is written in XML
- WSDL is an XML document
- WSDL is used to describe Web services
- WSDL is also used to locate Web services
- WSDL is a W3C recommendation

The WSDL Document Structure

A WSDL document describes a web service using these major elements.

<typesA container for data type definitions used by the web service
<message>  A typed definition of the data being communicated
<portType> A set of operations supported by one or more endpoints
<binding> A protocol and data format specification for a particular port type

Structure as follows:
<definitions>
     <types>
           data type definitions........
     </types>

     <message>
           definition of the data being communicated....
     </message>

     <portType>
           set of operations......
     </portType>

     <binding>
           protocol and data format specification....
     </binding>
</definitions>

WSDL - The <portType> Element

The <portType> element defines a web service, the operations that can be performed, and the messages that are involved.

<portType> defines the connection point to a web service.

Operation Types :
The request-response type is the most common operation type, but WSDL defines four types:

One-way :

The service receives a message. The operation therefore has a single input element.

The grammar for a one-way operation is:
<wsdl:definitions .... >
    <wsdl:portType .... > *
         <wsdl:operation name="nmtoken">
               <wsdl:input name="nmtoken"? message="qname"/>
         </wsdl:operation>
    </wsdl:portType >
</wsdl:definitions>

Request-response :

The service receives a message and sends a response.
The operation therefore has one input element, followed by one output element.
To encapsulate errors, an optional fault element can also be specified.

The grammar for a request-response operation is:
<wsdl:definitions .... >
     <wsdl:portType .... > *
         <wsdl:operation name="nmtoken" parameterOrder="nmtokens">
                <wsdl:input name="nmtoken"? message="qname"/>
                <wsdl:output name="nmtoken"? message="qname"/>
                <wsdl:fault name="nmtoken" message="qname"/>*
         </wsdl:operation>
     </wsdl:portType >
</wsdl:definitions>

Solicit-response :

The service sends a message and receives a response.
The operation therefore has one output element, followed by one input element.
To encapsulate errors, an optional fault element can also be specified.

The grammar for a solicit-response operation is:
<wsdl:definitions .... >
    <wsdl:portType .... > *
          <wsdl:operation name="nmtoken" parameterOrder="nmtokens">
               <wsdl:output name="nmtoken"? message="qname"/>
               <wsdl:input name="nmtoken"? message="qname"/>
               <wsdl:fault name="nmtoken" message="qname"/>*
          </wsdl:operation>
    </wsdl:portType >
</wsdl:definitions>

Notification :

The service sends a message. The operation therefore has a single output element.

Following is the grammer for a notification operation:
<wsdl:definitions .... >
     <wsdl:portType .... > *
          <wsdl:operation name="nmtoken">
               <wsdl:output name="nmtoken"? message="qname"/>
           </wsdl:operation>
     </wsdl:portType >
</wsdl:definitions>

WSDL Binding Element

The <binding> element provides specific details on how a portType operation will actually be transmitted over the wire.

* The bindings can be made available via multiple transports, including HTTP GET, HTTP POST, or SOAP.
* The bindings provide concrete information on what protocol is being used to transfer portType operations.
* The bindings provide information where the service is located.

For SOAP protocol, the binding is <soap:binding>, and the transport is SOAP messages on top of HTTP protocol.

* You can specify multiple bindings for a single portType.

The binding element has two attributes
- name attribute : defines the name of the binding
- type attribute : points to the port for the binding

<binding name="Hello_Binding" type="tns:Hello_PortType">

SOAP Binding

This enables you to specify SOAPspecific details, including SOAP headers, SOAP encoding styles, and the SOAPAction HTTP header.

The SOAP extension elements include: 

soap:binding
This element indicates that the binding will be made available via SOAP.

The style attribute indicates the overall style of the SOAP message format.
A style value of rpc specifies an RPC format.

The transport attribute indicates the transport of the SOAP messages.

soap:operation
This element indicates the binding of a specific operation to a specific SOAP implementation.

soap:body
This element enables you to specify the details of the input and output messages.

<binding name="Hello_Binding" type="tns:Hello_PortType">
    <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
            <operation name="sayHello">
                    <soap:operation soapAction="sayHello"/>
                    <input>
                          <soap:body
                                  encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
                                  namespace="urn:examples:helloservice"
                                  use="encoded"/>
                   </input>
                   <output>
                           <soap:body
                                   encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
                                   namespace="urn:examples:helloservice"
                                   use="encoded"/>
                   </output>
           </operation>
</binding>

WSDL Ports Element
A <port> element defines an individual endpoint by specifying a single address for a binding.

Here is the grammer to specify a port:
<wsdl:definitions .... >
    <wsdl:service .... > *
         <wsdl:port name="nmtoken" binding="qname"> *
         <-- extensibility element (1) -->
         </wsdl:port>
    </wsdl:service>
</wsdl:definitions>

* The port element has two attributes :
          - name attribute : provides a unique name among all ports defined within in the enclosing WSDL document.
          - binding attribute : refers to the binding using the linking rules defined by WSDL.

* A port MUST NOT specify more than one address.
* A port MUST NOT specify any binding information other than address information.

<service name="Hello_Service">
        <documentation>WSDL File for HelloService</documentation>
              <port binding="tns:Hello_Binding" name="Hello_Port">
                    <soap:address location="http://www.examples.com/SayHello/">
              </port>
</service>

Reference : http://www.w3schools.com