ARTICLE

Web Service WSDL Easily Explained

Posted by Suresh Paldia Articles | Web Services in C# November 26, 2010
In this article the Web Services Description Language (WSDL) is easily explained.
Reader Level:


WSDL:

  • Web Services Description Language.
  • WSDL is an XML format for describing network services.
  • In General, WSDL is an XML-based language for describing Web services and how to access them.

A WSDL document uses the following elements in the definition of network services
  • Types- Used to describe the data types of messages that are exchanged.
  • Message- Data being transmitted(input parameters, output result, etc).
  • Operations- Methods supported by the service.
  • PortType- Set of operations.
  • Binding- a concrete protocol and data format specification for a particular port type.
  • Port- a single endpoint for communicating with service.
  • Service- a collection of related post.

WSDl XML contains :

WSDL.gif

Easy Example:

Note: Just go on reading the comments, and you will get everything in code

The example is taken from http://www.w3.org/TR/wsdl and is easily explained below...

//The first line says that it is an XML file
<?xml version="1.0"?>
//Root element is <definitions>, defining your web service till </definitions>
//This list the namespaces that you are following in webservice description
<definitions name="StockQuote" targetNamespace="http://example.com/stockquote.wsdl"
          xmlns:tns="http://example.com/stockquote.wsdl"
          xmlns:xsd1="http://example.com/stockquote.xsd"
          xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
          xmlns="
http://schemas.xmlsoap.org/wsdl/">
 
 
//----------------------- TYPES
    //Name the data items and their types that will
    // be passed in request and response messages
    <types>
       <schema targetNamespace="http://example.com/stockquote.xsd"
              xmlns="http://www.w3.org/2000/10/XMLSchema">
           <element name="TradePriceRequest">
              <complexType>
                  <all>
               
//Some tickerSymbol variable of type string
                //named as TradePriceRequest
                //Here, don't know, whether input parameter or return result
                      <element name="tickerSymbol" type="string"/>
                  </all>
              </complexType>
           </element>
           <element name="TradePrice">
              <complexType>
                  <all>
               
//Some price variable of type float named as TradePrice
                //Here, don't know, whether input parameter or return result
                      <element name="price" type="float"/>
                  </all>
              </complexType>
           </element>
       </schema>
    </types>

//----------------------- MESSAGES
    //Messages are all request parameters and response results
    //Here the message holds TradePriceRequest element
    //Now, what is TradePriceRequest element?
    //See, the defination in <types><element></element></types> above
    
<message name="GetLastTradePriceInput">
       <part name="body" element="xsd1:TradePriceRequest"/>
    </message>
    //Here the message holds some TradePrice element
    //Now, what is TradePrice element?
    //See, the defination in <types><element></element></types> above
        
    <message name="GetLastTradePriceOutput">
       <part name="body" element="xsd1:TradePrice"/>
    </message>
 
//----------------------- PORTTYPE
    //Mention the operations(methods) in webservice
    //All operations are bind to a portType
   
<portType name="StockQuotePortType">
    //Here, service supports only 1 operation - GetLastTradePrice
    //Input: ticker symbol of type string
    //Output: price as a float
        <operation name="GetLastTradePrice">
               <input message="tns:GetLastTradePriceInput"/>
                 
               <output message="tns:GetLastTradePriceOutput"/>
         </operation>
         //Here, you can mention second operation
         <operation name="_______">
               <input message="tns:_______"/>
               <output message="tns:_______"/>
         </operation>
         //Here, third operation and so on
     </portType>
 
//----------------------- BINDING
    //Binding is a concrete protocol and
    //data format specification for a particular port type
    <binding name="StockQuoteSoapBinding" type="tns:StockQuotePortType">
       
//type of protocol used to call webservice
        <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
        <operation name="GetLastTradePrice">
          
//Below lines defines the address of the operation
           <soap:operation soapAction="http://example.com/GetLastTradePrice"/>
           <input>
               <soap:body use="literal"/>
//Its input
           </input>
           <output>
               <soap:body use="literal"/>
//Its output
           </output>
        </operation>
    </binding>

//----------------------- SERVICE
    //A service groups a set of related ports together:
    <service name="StockQuoteService"> //unique name of service
        <documentation>My first service</documentation>
       
//port specifies onw and only one address/endpoint for binding
        <port name="StockQuotePort" binding="tns:StockQuoteBinding">
           //location defines the address of your service
           <soap:address location="http://example.com/stockquote"/>
        </port>

        <port>
        </port>

        <port>
        </port>
    </service>
//-----------------------
</definitions>

//-----------------------

Happy learning....

Login to add your contents and source code to this article
post comment
     
COMMENT USING
PREMIUM SPONSORS
DynamicPDF™ product line allows you to dynamically generate PDF documents, merge PDF documents and add new content to existing PDF documents from within your applications.
Get Career Advice from Experts
SPONSORED BY
  • PDF reports have never been easier to create. With our included WYSIWYG Designer, you can layout your reports, set up your data source and let DynamicPDF ReportWriter do the rest.