W3C
WSDL est un langage XML qui permet de décrire: un service réseau (service Web), et comment l’ invoquer (localisation, paramètre, structure de retour, ..)
Décrire les services comme un ensemble d’opérations et de messages abstraits reliés à des protocoles et des serveurs réseaux Cet objectif se rapproche d’IDL pour CORBA.
WSDL standardise les schémas XML utilisés pour établir une connexion entre émetteurs et récepteurs. Par conséquent, il est possible d’automatiser certaines opérations nécessaires à l’appel
Un document WSDL est donc associé à un Web Service afin d’en décrire l’ensemble des éléments qu’il expose vers le monde extérieur :
Les services sont vus comme des ensembles de ports réseaux
<types>Contient les définition de types utilisant un système de typage (comme XSD).
<types>
<xsd:schema targetNamespace="http://exemple.com/personne.xsd"
xmlns:xsd="http://www.w3.org/1999/XMLSchema">
<xsd:complexType name=“Personne”>
<xsd:element name=“Nom” type=“xsd:string”>
<xsd:element name=“Prenom” type=“xsd:string”>
<xsd:element name=“Age” type=“xsd:float”>
</complexType>
</types>
<message>Décrit les noms et types d’un ensemble de champs à transmettre (Paramêtres d’une invocation, valeur du retour, …)
<message name="GetPersonne">
<part name="body" type="per:Personne"/>
</message>
<message name="AddPersonne">
<part name="Nom" type="xsd:string"/>
<part name="Prenom" type="xsd:string"/>
<part name="Age" type="xsd:float"/>
</message>
<portType>Décrit un ensemble d’opérations. Chaque opération a zero ou un message en entrée, zero ou plusieurs message de sortie ou de fautes
<portType> décrit un ensemble d’opérations.<input>).<input>) et retourne un message corrélé (<output>) ou un ou plusieurs messages d’erreur (<fault>).<ouput>) et recoit un message corrélé (<input>) ou un ou plusieurs messages d’erreur (<fault>). <ouput>)Paramètres : Les champs des messages constituent les paramètres (in,out, inout) des opérations
<portType name="CarnetAdresse">
<operation name="AddPersonne">
<input message="AddPersonneRequest"/>
</operation>
<operation name="GetPersonneParNom">
<input message="GetPersonneParNom Request"/>
<output message=" GetPersonneParNom Response"/>
</operation>
</portType>
<binding>Spécifie une liaison d’un <porttype> à un protocole concret (SOAP1.1, HTTP1.1, MIME, …). Un porttype peut avoir plusieurs liaisons !
<binding> spécifie La liaison d’un <portType> à un protocole concret (SOAP1.1, HTTP GET/POST, MIME, …).<portType> peut avoir plusieurs <binding> pour répondre à plusieurs protocoles.<soap:binding transport="uri" style="soap_style" /> précise que le binding est de type SOAP.<transport> définit le type de transport pour utiliser SOAP/HTTP<style> définit la façon dont sont créer les messages SOAP de toutes les opérations<portType> :<soapAction><style><binding type="CarnetAdresseBinding">
<soap:binding
transport="http://schemas.xmlsoap.org/soap/http"
style="rpc" />
<operation name="GetPersonneParNomOpe">
<soap:operation soapAction="http://exemple.com/ GetPersonneParNom " />
<input>
<soap:body use="encoded"
encodingStyle="schemas.xmlsoap.org/soap/encoding"/>
</input>
<output>
<soap:body use="encoded"
encodingStyle="schemas.xmlsoap.org/soap/encoding"/>
</output>
</operation>
</binding>
<port>Spécifie un point d’entrée (endpoint) comme la combinaison d’un
L’élément <port> est associé à un <portType>
Dans le cadre de SOAP, un élément <port> à une adresse (qui correspond à l’adresse http)
<port name="CarnetAdressePort" binding="per:CarnetAdresseBinding ">
<soap:address location="http://example.com/GetPersonneParNom"/>
</port>
<service>Une collection de points d’entrée (endpoint) relatifs.
<service name=“CarnetAdresseService">
<port name=" CarnetAdressePort " binding="per:PersonnesBinding">
<soap:address location="http://example.com/GetPersonneParNom"/>
</port>
</service>
<?xml version="1.0" ?>
<definitions name="CarnetAdresse" targetNamespace="http://exemple.com/carnetAdresse.wsdl" xmlns:per="http://example.com/carnetAdresse.wsdl" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns="http://schemas.xmlsoap.org/wsdl/">
<types>
<xsd:schema targetNamespace="http://exemple.com/personne.xsd" xmlns:xsd="http://www.w3.org/1999/XMLSchema">
<xsd:complexType name="Personne">
<xsd:element name="Nom" type="xsd:string">
<xsd:element name="Prenom” type="xsd:string">
<xsd:element name="Age" type="xsd:float">
</complexType>
</types>
<message name="GetPersonne">
<part name="body" type="Personne"/>
</message>
<message name="AddPersonne">
<part name="Nom" type="xsd:string"/>
<part name="Prenom" type="xsd:string"/>
<part name="Age" type="xsd:float"/>
</message>
<portType name="CarnetAdresse">
<operation name="AddPersonne">
<input message="AddPersonneRequest"/>
</operation>
<operation name="GetPersonneParNom">
<input message="GetPersonneParNom Request"/>
<output message=" GetPersonneParNom Response"/>
</operation>
</portType>
<binding type="CarnetAdresseBinding">
<soap:binding
transport="http://schemas.xmlsoap.org/soap/http"
style="rpc" />
<operation name="GetPersonneParNomOpe">
<soap:operation soapAction="http://exemple.com/ GetPersonneParNom " />
<input>
<soap:body use="encoded"
encodingStyle="schemas.xmlsoap.org/soap/encoding"/>
</input>
<output>
<soap:body use="encoded"
encodingStyle="schemas.xmlsoap.org/soap/encoding"/>
</output>
</operation>
</binding>
<service name=“CarnetAdresseService">
<port name=" CarnetAdressePort " binding="per:PersonnesBinding">
<soap:address location="http://example.com/GetPersonneParNom"/>
</port>
</service>
</definitions>