I. Introduction▲
WebServices est une des nouvelles révolutions de l'Internet d'aujourd'hui.
Cette technologie propose un nouveau modèle de communication Client/Serveur.
Ce modèle dispose d'une grande souplesse de mise en œuvre, basé sur deux standards :
- SOAP : Simple Object Access Protocol qui définit la structure des messages XML utilisés par les applications pour dialoguer entre elles ;
- WSDL : un format de description des méthodes et des paramètres des services invocables par le biais des messages aux formats SOAP.
Les applications clientes et le serveur de WebServices utilisent le protocole HTTP pour transporter les requêtes et les réponses.
Les applications clientes peuvent être de toute nature (Windows, Linux, Applications Web ISAPI, CGI… ) et écrites avec différents langages.
Comme son nom l'indique, un WebService est conçu pour rendre un service.
Prenons le cas d'un site dont le contenu change régulièrement, comme un journal. Ce site peut proposer un WebService permettant de retrouver le sommaire du jour.
Ce sommaire sera dépourvu de tout « design » ou charte graphique du journal, permettant ainsi de n'avoir que les données brutes. Ces données pourront être traitées comme bon vous semble.
Vous pouvez par exemple les intégrer sur votre propre site avec votre charte graphique, concevoir un logiciel qui présentera le sommaire du journal…
Après cette brève introduction, parlons de Delphi.
La nouvelle mouture de Delphi (version 6) permet de créer des serveurs et des clients WebServices avec une simplicité extrême.
Des composants spécialisés encapsulent tous les mécanismes de SOAP et WSDL, qui sont complètement transparents.
Les développeurs peuvent alors se focaliser tranquillement sur l'essence du WebService et écrire les méthodes principales du service.
II. Création d'un serveur de WebService et de son client▲
Étape #1 : Préparation▲
Le WebService que nous allons réaliser dans cet article ne va implémenter qu'un service.
Ce service ne fera qu'une chose, nous dire Bonjour ;-).
Menu File | New > Other… Dans la boite de dialogue New Items, cliquez sur l'onglet WebServices puis double-cliquez sur l'icône Soap Server Application.
Delphi crée un WebModule (TWebModule) avec trois composants :
- HTTPSoapDispatcher1 (THTTPSoapDispatcher) permet de dispatcher les messages entrant vers les composants qui vont traiter les messages ;
- HTTPSoapPascalInvoker1 (THTTPSoapPascalInvoker) permet de convertir les messages SOAP entrants et sortants ;
- WSDLHTMLPublish1 (TWSDLHTMLPublish) permet de publier simplement les services gérés par le serveur.
(Pour plus d'informations sur ces composants, vous pouvez consulter l'aide de Delphi.)
Étape #2 : Écriture du WebService▲
Chaque service est représenté par une interface implémentée par le serveur.
Cette interface dérive de l'interface de base IInvokable.
Nous devons donc déclarer les méthodes de cette interface puis implémenter ses méthodes.
Borland offre un outil pour créer le corps des unités d'interfaçage et d'implémentation pour les utilisateurs enregistrés de Delphi 6.
Vous pouvez bien entendu écrire les deux unités suivantes directement « à la main » si vous n'avez pas souhaité vous enregistrer.
unit
HelloIntf;
interface
uses
Types, XSBuiltIns;
type
IHello = interface
(IInvokable)
['{AEFF18AD-0C30-4609-BE49-B52933DCA8DE}'
]
function
SayHello: String
; stdcall
; // Une méthode de notre service Hello
end
;
implementation
uses
InvokeRegistry;
initialization
InvRegistry.RegisterInterface(TypeInfo(IHello), ''
, ''
);
end
.
unit
HelloImpl;
interface
uses
HelloIntf, InvokeRegistry;
type
THello = class
(TInvokableClass, IHello)
public
function
SayHello: String
; stdcall
;
end
;
implementation
{ THello }
function
THello.SayHello: String
;
begin
result := 'Hello World!'
;
end
;
initialization
InvRegistry.RegisterInvokableClass(THello);
end
.
Rien de bien sorcier ! Vous n'avez plus qu'à compiler le projet et votre premier WebService sera créé !
Étape #3 : Installation du WebService▲
Vous devez copier le fichier compilé dans un répertoire virtuel de votre site Web.
Ce répertoire doit avoir des droits d'exécution.
Bien entendu la plateforme doit être de type Windows (2000 Server et IIS5 sont parfaits).
Vous pouvez afficher le fichier WSDL du WebService pour vérifier que l'appel au service fonctionne.
Il suffit de lancer votre navigateur Web et d'entrer l'URL du WebService.
En local, avec ma configuration le résultat dans Internet Explorer 5 est le suivant :
Vous pouvez consulter en ligne ce même fichier : http://www.zanetti-dev.com/scripts/WSHello.exe/wsdl/IHello.
Le but de cet article est d'expliquer la structure du fichier WSDL. Je vous conseille de visiter le site www.w3.org pour les spécifications officielles de WSDL.
Étape #4 : Création d'un client pour notre WebService▲
Créer tout simplement une application avec une seule form.
Puis dans le menu File | New > Other… sélectionnez, toujours dans la palette WebServices, WebServices Importer.
Entrez l'URL de votre WebServices (voir au-dessus).
Si vous n'avez pas créé le WebService auparavant, vous pouvez fabriquer le client en utilisant l'URL de mon WebService à l'adresse : http://www.zanetti-dev.com/scripts/WSHello.exe/wsdl/IHello
Cet assistant crée pour vous, une unité avec l'interface complète du WebService.
Unit
Unit2;
interface
uses
Types, XSBuiltIns;
type
IHello = interface
(IInvokable)
['{271C7063-6D09-4497-9A28-FD55F5ACE45E}'
]
function
SayHello: WideString; stdcall
;
end
;
implementation
uses
InvokeRegistry;
initialization
InvRegistry.RegisterInterface(TypeInfo(IHello), 'urn:HelloIntf-IHello'
, ''
);
end
.
Puis, placez un composant THTTPRIO (palette WebServices) sur votre form1.
Modification des propriétés de HTTPRIO1
- Renseignez la propriété WSDLLocation de HTTPRIO1 avec la même URL que précédemment.
- Sélectionnez le service IHelloService dans la liste de la propriété Service de HTTPRIO1.
- Sélectionnez le port du service IHelloPort dans la liste de la propriété Port de HTTPRIO1.
Ces informations ont été fournies automatiquement par le fichier WSDL de notre WebService.
Ajoutons un bouton (Button1) sur la form1 et plaçons le code suivant dans l'évènement OnClick.
uses
Unit2; // Unité de l'interface
procedure
TForm1.Button1Click(Sender: TObject);
begin
ShowMessage((HTTPRIO1 as
IHello).SayHello);
end
;
Compilez et exécutez le projet. Puis cliquez sur le bouton « Say Hello ».
Vous devez voir apparaitre une boite de dialogue avec le message « Hello World! ».
Le composant HTTPRIO1 s'est connecté au WebService lui a demandé de fournir un service (SayHello), puis a récupéré l'information.
Et tout cela sans le moindre effort ! Merci Delphi !
Notre exemple de WebService est très simple.
Vous pouvez trouver une liste de WebServices sur le site www.xmethods.com.
Ce site présente une liste de Webservices variés et gratuits que vous pouvez implémenter dans vos applications !
Vous pouvez simplement refaire l'étape 4 pour implémenter ces services.
Je suis à votre disposition pour répondre à toutes questions relatives à cet article à l'adresse a.zanetti@zanetti-dev.com.