Support de Formation Windev Les Webservices
Support de Formation Windev Les Webservices
Support de Formation Windev Les Webservices
Présentation
Outils :
Ce TP a été crée avec WinDev 9, l'adaptation une autre version est mineure, c'est plus souvent un
problème de localisation des menus.e
Le but de cet exercice est de vous faire pénétrer dans le monde merveilleux et surtout à la mode
des Web-Services. En effet l'heure actuelle est à répartition des charges et des serveurs, c'est dans
ce contexte qu'interviennent les Web-Services. Mais d'abord quelques définitions :
Dans ce chapitre, nous allons vous présenter les WebServices : c'est-à-dire pourquoi les
WebServices ont été créés et à quelle demande répond cette nouvelle technologie.
II.1. Présentation :
Auparavant pour mettre en place des applications distribuées, il fallait utiliser des technologies
assez complexes telles que COM. Certes ces technologies étaient abordables pour un développeur,
mais il fallait que le développeur passe du temps à établir un protocole de transmission.
Les WebServices sont alors apparus pour faciliter tout d'abord la tâche des développeurs. Avant
toute chose, Microsoft, contrairement aux idées reçues, n'a pas créé les WebServices mais
Microsoft a participé avec de grandes entreprises telles que IBM, SUN ... à la standardisation des
WebServices. Ceci montre bien que la technologie des WebServices est une technologie très jeune,
ce qui bien sûr peut être un inconvénient pour son intégration au sein des entreprises. Mais les plus
grands spécialistes prévoient une « explosion » de l'utilisation des WebServices toutes technologies
confondues (.NET, Java ...).
En effet, les WebServices se reposent sur des protocoles tels que XML et http, donc SOAP. Pour
vulgariser ce dernier protocole, SOAP permet de faire circuler du XML via du HTTP. Donc lorsqu'on
interroge un WebService, les données sont transmises en XML via le port 80 (HTTP). Rien de plus
simple ensuite pour le développeur de traiter l'information reçue.
A l'heure actuelle, la quasi totalité des langages informatiques supporte ces protocoles : ils
disposent en effet de fonctions pour lire un fichier XML (Parseur XML). Donc un WebService peut
être utilisé via le langage Perl, PHP, Python, Delphi, Cobol ...
Comment faire communiquer des programmes tournant sur des machines distantes, des OS
différents, développés par des compagnies différentes ? Comment dans ce cas de figure faire du
remoting ? A moins d'utiliser des nombreux ponts qui existent, c'est quasi impossible. Bien
évidemment, des ébauches de solutions ont été apportées et ont fait leur preuve (CORBA, COM,
DCOM, ...)
Les WebServices sont eux universels et de plus le HTTP passe sans peine par un firewall ...
On demande au WebService son contrat WSDL (Web Service Description Language) : c'est
un document formalisé (XML, W3C) qui spécifie quels sont les méthodes pouvant être
appelées sur ce WebService.
Les WebServices passant (sauf si vous en décidez autrement) par http, peuvent utiliser d'autres
protocoles que SOAP pour transporter des données. Mais ceci implique des restrictions, énoncées
ci-dessous :
Objets
Structures
III. Soap
III.1. Présentation
Nous allons décrire dans ce chapitre le protocole SOAP et ses concurrents (COM, CORBA ...). En
effet, comme nous l'avons vu dans le chapitre précédent, la technologie des WebServices repose
en autres sur le protocole SOAP.
SOAP est un protocole adopté par le Consortium W3C. Le Consortium W3C crée des standards pour
le Web : son but est donc de créer des standards pour favoriser l'échange d'information. Un
standard veut tout simplement dire qu'il peut être accessible à tout le monde, et donc qu'il n'est
pas propriétaire. Ce qui a pour conséquence qu'un protocole standard contrairement à un protocole
propriétaire pourra être utilisé sous n'importe quelle plateforme.
http://www.w3.org/TR/SOAP/
SOAP veut dire : Simple Object Access Protocol. Si l'on voulait traduire cette définition en français
cela donnerait Protocole Simple d'Accès aux Objets. En effet, le protocole SOAP consiste à faire
circuler du XML via du http sur le port 80. Cela facilite grandement les communications, car le XML
est un langage standard et le port utilisé est le port 80, qui ne pose donc pas de problèmes pour
les firewalls de l'entreprise, contrairement à d'autres protocoles.
Tout comme la technologie des WebServices, le protocole SOAP est très jeune. Le protocole SOAP
a été crée en septembre 98, avec la version 0.9, par trois grandes entreprises : Microsoft,
UserLand et DevelopMentor. lBM n'a participé au protocole SOAP qu'à partir de la version 1.1 en
avril 'est cette même année que SOAP a été soumis au W3C.
Depuis septembre 2000, SOAP l. l est en refonte complète pour donner jour à la version 1.2 avec
un groupe de travail de plus de 40 entreprises ! Parmi ces 40 entreprises, on retrouve bien sûr
Microsoft, IBM mais aussi HP, Sun, Intel ...)
Jusqu'à la création du protocole SOAP, trois grands protocoles étaient utilisés : COM et DCOM :
Les protocoles COM (Component Object Model) et DCOM (Distributed Component Object Model)
ont été écrits par Microsoft et permettaient de faciliter la communication entre les composants
Windows. II y a eu un portage de COM sous Unix, mais ce protocole n'a été utilisé par que par des
plateformes Windows et pour l'Intranet.
Les protocoles COM et DCOM n'étaient utilisés la plupart du temps que pour l'Intranet, car le port
d'écoute des communications était statique : c'est-à-dire qu'on ne pouvait pas changer ce port et
cela posait de gros problèmes de sécurité pour les entreprises qui voulaient utiliser ce protocole
pour communiquer entre elles.
III.3. CORBA :
CORBA (Common Object Request Broker Architecture) a été créé par l'OMG (Object Management
Group) pour faciliter la communication sous n'importe quelle plateforme. Ceci a été réalisé via un
langage neutre de définition d'interface appelé IDL (Interface Definition Language) et un protocole
commun de transport des données.
Malheureusement, les spécifications de ce protocole sont très denses et l'architecture est donc au
final très lourde à déployer.
III.4. RMI :
RMI ( Remote Method Invocation ) est un protocole très simple a utiliser et très efficace mais limité
à l'environnement Java
Pour pouvoir tester le WebService sur votre machine de développement il va vous falloir un serveur
Web en fonctionnement. Je vous propose de travailler avec Apache. Le plus simple est d'installer
Easyphp. Une fois celui-ci installé sur votre poste vous devrez le configurer pour qu'il reconnaisse
les Webservices WinDev. Suivez les étapes suivantes ( tirées de l'aide en ligne de WinDev rubrique
SOAP )
1. Ouvrez le fichier "httpd.conf" dans le bloc-notes Windows. Ce fichier est présent dans le sous-
répertoire conf de votre installation Apache.
2. Recherchez la section concernant le support des objets partagés. Pour cela, recherchez :
soit la ligne suivante : " # Dynamic Shared Object (DSO) Support "
Ajoutez la ligne :
4. Recherchez la section concernant les " handlers " de requêtes. Pour cela, recherchez :
soit la ligne " # AddHandler allows you to map certain file extensions to "handlers",
soit le mot-clé " AddHandler ".
5. Recherchez la ligne
"WHENEVER YOU CHANGE THE LOADMODULE SECTION ABOVE, UPDATE THIS TOO!"
Ces deux dernières opérations ne pourront ce faire qu'à la fin de l'exercice. Pensez y
avant de crier que le webservice ne fonctionne pas !
6. Recherchez dans le fichier "httpd.conf" la section concernant le répertoire par défaut des
fichiers. Pour cela, recherchez le mot clé " documentroot ".
Copiez dans le répertoire indiqué après le mot clé " documentroot " les fichiers suivants :
si plusieurs bibliothèques (fichier WDL) correspondant à des applications SOAP serveur (ou à des
services Web XML) sont présentes sur le poste, cette option permet de configurer le temps
maximal d'attente avant de supprimer de la mémoire une bibliothèque inutilisée. Lors de cette
suppression le code de fin de projet sera exécuté.
Cette option permet d'enregistrer dans un fichier texte toutes les opérations réalisées sur le
serveur SOAP. Pour chaque opération, la date et l'heure sont indiquées. Ce fichier peut par
exemple contenir les messages suivants :
Chargement de
L'appel à a échoué
L'appel à a réussi
Déchargement de
Fichier journal :
Répertoire du serveur où sont présentes les bibliothèques des applications Serveur SOAP.
Remarque : si le répertoire n'existe pas, les WDL seront recherchées dans le répertoire
C:\modulessoap.
Répertoire du serveur où sont présentes les DLL WinDev utilisées par les applications Serveur
SOAP. Remarque : si le répertoire n'existe pas, les DLL seront recherchées dans le répertoire
C:\modulessoap.
Répertoire des fichiers Hyper File. Lors du chargement de la bibliothèque du serveur SOAP :
De l'action
Bon, on y va ?
Comme je viens de vous le dire un WebService est un ensemble de procédures ou de classes. Dans
cet exercice nous allons utiliser les procédures globales. Créez en une nommée « Répondre »
Comme vous le voyez : on se fatigue ! En fait pour ce premier exercice on se contente d'illustrer
les principes donc je vous prie de m'excuser pour la faiblesse de l'illustration !!! Vous ferez mieux
plus tard ;-)))
Bon, si je vous disais que le WebService est fini, vous le croiriez ? et pourtant c'est vrai !. Ah non, il
reste à le déployer, on va le faire de suite :
Pour Windev 9 :
Allez dans le menu Atelier puis Service Web XML ( SOAP, .net, J2EE) puis Générer un
service Web à partir de ce projet.
L'écran suivant lance l'assistant :
Une fois les fichiers copiés dans le bon dossier apache, vous devriez obtenir ceci :
Lors de votre configuration dans le fichier «Httpd.Conf » apache, vous avez indiqué à Apache
comment se comporter pour exécuter un WebService SOAP Windev ( Cf : loadmodule ).
Nous retrouvons donc les librairies ( .dll ) spécifiques WinDev pour exécuter dans un contexte
client/serveur les méthodes contenues dans tpwebservice.wdl.
Nous allons maintenant intégrer la définition du service Web à l'intérieur de ce projet, pour cela :
Imaginiez que le service Web est sur un serveur localisé sur Internet ? Et bien c'est ici que vous
localiseriez sa descriptionNous allons indiquer ici le lieu ou est stocké notre service.
C'est pas qu'on sache pas, mais en fait c'est du SOAP générique que l'on a fait donc.
Aller, hop, un petit coup sur suivant. ! C'est lassant je vous dis !
Vous avez le choix, soit vous vous la pétez à être moderne et vous choisissez la classe, soit vous
êtes plutôt rétro et vous prenez les procédures. Perso, vu mon grand âge c'est procédures, un
potage et au lit !
Un petit coup d'oil en bas de l'éditeur vous permettra de découvrir l'intégration de la méthode (
dans le cas ou vous avez choisis d'intégrer le WebService en temps que collection de procédure,
sinon cherchez dans les classes)
Maintenant nous allons donner vie à tout ça, pour commencer créez un nouvelle fenêtre nommée
départ qui sera la première fenêtre du projet. Elle va ressembler à ceci :
Explications : Vous vous rappelez que la procédure « repondre » du WebService n'effectue qu'un
renvoie d'une chaîne texte contenant « coucou ». Donc logiquement en cliquant sur le bouton de la
fenêtre nous devrions avoir un fenêtre d'information contenant la chaîne « coucou ».
Lancez l'exécution du projet ou de la fenêtre, cliquez sur « Bouton » et si « coucou » apparaît vous
pouvez prendre une pause, sinon.refaites l'exercice.
Maintenant allons visiter la plomberie, ouvrez le code de la procédure repondre, vous devez avoir
ceci
PROCEDURE repondre()
bRes est un booléen
RENVOYER SOAPDonneRésultat(SOAPRésultat)
bRes=SOAPExécute("http://localhost/service.soap", "repondre", "tpwebservice",
"tpwebservice/repondre")
Cette ligne se charge de faire exécuter la procédure sur le serveur SOAP et renvoie le résultat dans
une variable booléenne (Vrai si la communication avec le serveur SOAP a été établie, Faux dans le
cas contraire).
SI PAS bRes ALORS
Tournure élégante pour dire si c'est pas vrai alors traitement de l'erreur.
RENVOYER SOAPDonneRésultat(SOAPRésultat)