Nous avons montré dans notre article "Construire
un service Web" combien l'architecture .NET offrait des facilités
pour créer des services Web. Nous allons voir ici qu'il en est de même
lorsqu'il s'agit de consommer un service.
Première étape
Avant toute chose, il nous faut un service à consommer ! Si vous en avez
un sous la main, cherchez son contrat WSDL. Sinon, il vous faudra partir en quête
d'un service au moyen d'un répertoire UDDI. Les principaux, gérés
par Microsoft, IBM, SAP ou NEC (ce dernier en Japonais) sont accessibles depuis
l'adresse uddi.org,
gérée par l'organisme OASIS. En revanche, chaque site ne contient
pas forcément les même informations, donc n'hésitez pas à
les fouiller les uns après les autres jusqu'à trouver le service
qui vous convient.
Pour cet article, nous allons simplement envoyer une requête Whois pour
un site Web, à l'aide d'un service trouvé l'UDDI d'IBM, wsWhoIs.
Deuxième étape
Une fois le contrat WSDL récupéré (ou du moins son URL),
il faut le rendre compréhensible à .NET, pour qu'il puisse en exploiter
les méthodes : nous utilisons pour cela un "proxy", une passerelle
entre votre programme et le service. Pour construire un proxy pour un service
donné, le .NET SDK propose un outil dédié, wsdl.exe,
très simple d'utilisation : dans DOS (l'invite de commande), il nous suffit
d'appeller cet outil, suivi de l'emplacement du contrat, du langage avec lequel
nous allons appeller le service, et de l'espace de nom que l'on veut lui assigner
dans notre application. Pour wsWhoIs en C#, cela donnera :
wsdl.exe http://www.joshuaz.com/webservices/wsWhois.asmx?WSDL
/n:QuiEst /l:cs /o:wsWhoIs.cs
Les options par défaut étant "cs" pour /l
(langage) et le nom du service pour /o (fichier
de sortie), nous aurions pu ici ne préciser que l'option /n
...
Nous obtenons dans le répertoire courant le code source wsWhois.cs,
qu'il est fortemment déconseillé de toucher.
Troisième étape
La création du proxy n'est pas exactement terminée : pour pouvoir
l'appeller dans le notre code, il nous faut encore compiler le code source précédemment
généré par wsdl.exe en une
DLL. Pour ce faire, il suffit d'utiliser le C# Compiler (dans notre cas), et de
combiner notre code source aux DLL utilisées pour appeller un service,
à savoir SYSTEM.DLL, SYSTEM.WEB.SERVICES.DLL et SYSTEM.XML.DLL.
csc.exe /target:library /out:wsWhois.dll
/reference:System.dll,System.web.services.dll,System.XML.dll
wsWhoIs.cs
Vous obtenez, dans le répertoire courant, le
fichier wsWhois.dll. Ici encore, nous aurions
pu ne pas utiliser l'argument /out, qui est utilisé
par défaut.
Quatrième étape
Il est temps (enfin!) d'écrire un peu de code C#... Nous utiliserons ici
l'outil WebMatrix.
Nous pouvons vous le dire maintenant : les trois étapes précédentes
auraient pu être réalisées par l'outil "Web Service Proxy
Generator" de WebMatrix...
Le final est rapide :
1) Créez un nouveau fichier de type "Class",
nommé "QuiEst.cs" et en C#.
2) Entrez-y le code suivant :
using System;
public class QuiEst
{
public
static void Main (string[] args)
{
wsWhois
QuiService = new wsWhois();
Console.Write("Entrez
le nom du serveur (.com ou .net) : ");
string
Serveur = Console.ReadLine();
string
Resultat = QuiService.GetWhoIs("whois.internic.net", Serveur);
Console.Write(Resultat);
}
}
Nous savons comment parler
avec le proxy grâce au service lui-même : en allant sur l'adresse
du service, nous obtenons une page nous donnant les méthodes acceptées
par celui-ci. Celle qui nous intéresse est la troisième, GetWhoIs.
En cliquant sur son lien, nous voyons qu'il prend en argument deux chaînes
: le serveur WhoIs à utiliser, et le nom du site à tester. Il renvoi
une chaîne, le résultat. Il ne nous restait plus qu'à intégrer
ces informations dans le code de QuiEst.cs...
3) Compilez le fichier avec csc
/r:wsWhois.dll QuiEst.cs (dans l'invite de commande).
4) Testez-le, toujours dans
l'invite de commande, en tapant simplement QuiEst,
et suivez les instructions... Le programme se connecte au service via le proxy
que vous lui avez indiqué, et vous renvoi les données que le serveur
peut vous envoyer.
Voici notre code source.
|