WebServices avec Delphi 6 Entreprise

Les WebServices - Une technologie Client/Serveur révolutionnaire pour Internet

Article lu   fois.

L'auteur

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

1. Introduction

WebServices est une des nouvelles révolution 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 oeuvre, basé sur 2 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 toutes natures (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 son 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 etre 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.

2. Création d'un serveur de WebService et de son client

Etape #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-cliquer sur l'icone Soap Server Application.

Image non disponible

Delphi crée un WebModule (TWebModule) avec 3 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)

Image non disponible

Etape #2: Ecriture 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.

Image non disponible
Image non disponible

Vous pouvez bien entendu écrire les 2 unités suivantes directement "à la main" si vous n'avez pas souhaité vous enregistrer.

Unité HelloIntf.pas - Définition de l'interface du service :
Sélectionnez

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.pas - Implémentation des méthodes de IHello :
Sélectionnez

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éé !

Etape #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'éxé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 simplement 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.

Image non disponible

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.

Etape #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.

Entrer 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

Image non disponible

Cet assistant crée pour vous, une unité avec l'interface complète du WebService.

Unité Unit2.pas - Interface IHello générée par l'assistant :
Sélectionnez

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.

Image non disponible

Modification des propriétés de HTTPRIO1:

  • Renseignez la propriété WSDLLocation de HTTPRIO1 avec la même URL que précédement.
  • 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.

Image non disponible

Ajoutons un bouton (Button1) sur la form1 et plaçons le code suivant dans l'évènement OnClick.

Unité Unit1.pas - Source de la form principale :
Sélectionnez

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 !

Image non disponible

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 Webservice 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.

Lidste de mes articles :
Tableau comparatif des fonctionnalités de Delphi 3 à Delphi 7
WebServices avec Delphi 6 Entreprise

Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.