You are on page 1of 6

Module D314

Ingnierie des systmes base de services


WSDL
Introduction
Structure d'un message WSDL
Pratique
Bibliographie et Webographie
Grard-Michel Cochard
cochard@u-picardie.fr
Services Web
WSDL (Web Service Description Language)
Version du 24 fvrier 2007
Introduction
L'intrt des services Web est, en particulier, leur indpendance des systmes informatiques et des technologies
associes. Notamment, ce qu'est un service, comment il fonctionne doivent tre des informations accessibles sans effort.
C'est le but de WSDL qui est un langage (WML bien sr) de description d'un service Web (ce que SOAP ne fait pas). En
effet,
WSDL rend plus aise l'criture (en particulier des interfaces) et la maintenance des services Web
WSDL rend plus aise l'utilisation des services Web en rduisant la quantit de code (et en minimisant les erreurs
possibles) ncessaire leur implmentation
WSDL rend comprhensible l'volution d'un service Web puisqu'il fournit dynamiquement la description de chaque
service. Toutefois le "versionning" n'est pas encore prvu.
De plus en plus, les outils de cration de Web services incluent la possibilit d'diter le fichier de description en WSDL.
Mais ce n'tait pas le cas des premiers outils. Bien entendu, comme le fichier WSDL est en XML, il peut tre dit
l'aide d'un simple diteur de texte. Un des outils les plus populaires est WSIF (Web Service Invocation Framework)
d'IBM qui est un paquetage Java pouvant tre tlcharg depuis le site http://alphaworks.ibm.com/tech/wsif .
WSDL n'est pas actuellement une recommandation du W3C. Il n'est qu'un document de travail (WSDL 1.2), mais est quasi
universellement utilis. Dans ce qui suit on indiquera indiffremment par WSDL le langage de description et le document
dcrivant, avec ce langage, un service Web.
Structure d'un fichier WSDL
La structure d'un fichier WSDL comporte 5 parties principales contenues dans l'lment racine <definitions>
<?xml version="1.0" encoding="utf-8"? ----------- >
<wsdl:definitions>
<wsdl:types>
<!--dfinition des types abstraits de donnes -->
</wsdl:types>
<wsdl:message>
<!--structure des messages -->
</wsdl:message>
<wsdl:portType>
<!--Web Service Interface : dfinition d'un ensemble d'oprations -->
</wsdl:portType>
<wsdl:binding>
<!--comment accder au service -->
</wsdl:binding>
<wsdl:service>
<!--qui fournit le service -->
</wsdl:service>
</wsdl:definitions>
Reprenons les diffrentes parties du fichier WSDL en les illustrant par un exemple inspir de
http://msdn2.microsoft.com/en-us/library/ms996486.aspx
types : cet lment dfinit les types de donnes utilises. Pour s'abstraire de tout systme ou de tout langage, il
s'agit des types de donnes dfinies par XMLSchema.
exemple : pour un service effectuant des calculs mathmatiques
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:y="http://example.org/math/"
xmlns:ns="http://monsite.org/math/types/"
targetNamespace="http://monsite.org/math/">
<types>
<xsd:schema targetNamespace="http://monsite.org/math/types/"
xmlns="http://monsite.org/math/types/">
<xsd:complexType name="In">
<xsd:sequence>
<xsd:element name="X" type="xsd:double" />
<xsd:element name="Y" type="xsd:double" />
</xsd:sequence>
<xsd:complexType>
<xsd:complexType name="Out">
<xsd:sequence>
<xsd:element name="resultat" type="xsd:double" />
</xsd:sequence>
<xsd:complexType>
<xsd:element name="Ajouter" type="In" />
<xsd:element name="AjouterResponse" type="Out" />
<xsd:element name="Soustraire" type="In" />
<xsd:element name="SoustraireResponse" type=""Out" />
<xsd:element name="Multiplier" type="In" />
<xsd:element name="MultiplierResponse" type="Out" />
<xsd:element name="Diviser" type="In" />
<xsd:element name="DiviserResponse" type="Out" />
</xsd:schema>
</types>
-----------
</definitions>
message : cet lment dcrit les noms et les types des donnes changer
exemple :
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:y="http://example.org/math/"
xmlns:ns="http://monsite.org/math/types/"
targetNamespace="http://monsite.org/math/">
------------
<message name="AjouterMessage">
<part name="parameter" element="ns:Ajouter"/>
</message>
<message name="AjouterResponseMessage">
<part name="parameter" element="ns:AddResponse"/>
</message>
<message name="SoustraireMessage">
<part name="parameter" element="ns:Soustraire"/>
</message>
<message name="SoustraireResponseMessage">
<part name="parameter" element="ns:SoustraireResponse"/>
</message>
--------------
</definitions>
portTYpe : dfinition d'un ensemble d'oprations
exemple :
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:y="http://monsite.org/math/"
xmlns:ns="http://monsite.org/math/types/"
targetNamespace="http://monsite.org/math/">
-------------
<portType name="MathInterface">
<operation name="Ajouter">
<input message="y:AjouterMessage"/>
<output message="y:AjouterResponseMessage"/>
</operation>
<operation name="Soustraire>
<input message="y:SoustraireMessage"/>
<output message="y:SoustraireResponseMessage"/>
</operation>
<operation name="Multiplier">
<input message="y:MultiplierMessage"/>
<output message="y:MultiplierResponseMessage"/>
</operation>
<operation name="Diviser">
<input message="y:DiviserMessage"/>
<output message="y:DiviserResponseMessage"/>
</operation>
</portType>
---------------
</definitions>
binding : dfinition du format des messages et du protocole utilis par chaque type de port. Un port est un point
de terminaison de liaison (endpoint) compos d'une adresse Internet et d'un numro de port (comme 80 ou 90 ou
8080....)
exemple :
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:y="http://monsite.org/math/"
xmlns:ns="http://monsite.org/math/types/"
targetNamespace="http://monsite.org/math/">
-------------
<binding name="MathSoapHttpBinding" type="y:MathInterface">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" />
<operation name="Ajouter">
<soap:operation soapAction="http://monsite.org/math/#Ajouter" />>
<input>
<soap:body use="literal" />
</input>
<output>
<soap:body use="literal" />
</output>
</operation>
--------------
</binding>
--------------
</definitions>
Quelques commentaires : soap:binding indique qu'il s'agit d'une liaison SOAP 1.1 et que le message est de type
"document" (il pourrait tre "rpc") ; soap:operation dfinit la valeur d'en-tte HTTP SOAPAction ; soap:body dfinit
comment le "part" du message apparat dans la section Body du message SOAP (valeurs possibles : literal ou encoded)
service : collection de endpoints
exemple :
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:y="http://monsite.org/math/"
xmlns:ns="http://monsite.org/math/types/"
targetNamespace="http://monsite.org/math/">
-----------------
<service name="MathService">
<port name="MathEndpoint" binding="y:MathSoapHttpBinding">
<soap:address location="http://localhost/math/math.asmx"/>
</port>
</service>
</definitions>
Pratique
Reprenons notre site de tests de services Web signal dans le chapitre 2 et l'exemple du cours de l'Euro en dallars US.
Les onglets "View" ou "Analyze" permettent d'obtenir la description du service sous forme d'un fichier WSDL :
Bibliographie et Webographie
Ouvrages gnraux :
James SNELL, Doug TISWELL, Pavel KULCHENKO, Programming Web Services with SOAP, O'Reilly
Cyril VINCENT, XML et les services Web, ENI Editions, informatique technique
Documents du W3C :
http://www.w3.org/TR/2001/NOTE-wsdl-20010315
W3C Releases Three Web Services Description Language (WSDL) 1.2 Working Drafts.
W3C Updates Web Services Description Language (WSDL) Version 2.0 Drafts.
XML Schema for WSDL 2.0
Microsoft MSDN :
http://msdn2.microsoft.com/en-us/library/ms996486.aspx (Understanding WSDL)

You might also like