Appel d’un Webservice en .Net à l’aide de wsdl.exe

Logo Microsoft .NetDans la série des articles « mémo perso » (je vais finir par créer une catégorie), je vais vous expliquer comment créer une « classe proxy » en C# .Net qui vous permettra d’appeler un Webservice.

Pour votre culture générale, sachez qu’un Webservice est un service (jusque là on s’en doutait) qui permet d’interroger à l’aide d’une simple connexion http un programme (ok là je vulgarise volontairement) présent sur un serveur Web distant.
Un exemple : imaginez que vous avez un Webservice présent sur votre serveur Web qui vous permet d’obtenir la liste des utilisateurs enregistrés, de valider leur inscription, de supprimer un utilisateur … Imaginez que ce Webservice soit programmé dans n’importe quel langage, vous allez pouvoir développer un programme (qui ne sera pas forcément écrit dans le même langage que le Webservice) qui interrogera à distance votre Webservice, depuis votre Smartphone par exemple.

Si vous n’êtes pas développeur, ça n’est pas la peine de continuer la lecture de cet article, vous allez perdre votre temps.

Rentrons dans le vif du sujet…

Pré-requis 1 : Vous savez ce qu’est un Webservice
Pré-requis 2 : Vous devez développer un client pour ce Webservice en .Net
Pré-requis 3 : Vous avez quelques connaissances sur le développement en C# .Net

Mon problème :

Pour coder en .Net j’utilise SharpDevelop (#develop), qui est un environnement développement open source très similaire à Visual Studio .Net, le problème c’est que je n’arrive pas à faire fonctionner le module d’appel aux Webservices et de création de la classe proxy …
En plus je suis obligé de passer par un proxy et je n’ai pas trouvé où spécifier le serveur Proxy dans Sharpdevelop…

Bref, voici comment générer le fichier CS de la classe proxy en mode console.

Ouvrez une console (Démarrer/Executer/Cmd) :

appel-webservice-wsdl-exe-1

Tapez cd « C:\Program Files\Microsoft.NET\SDK\v2.0\Bin », et là magie nous allons utiliser l’utilitaire WSDL.exe (Web Services Description Language) inclus dans le SDK .Net.
N’hésitez pas à faire un petit WSDL /? pour consulter l’aide et les options de WSDL :

appel-webservice-wsdl-exe-2

Et voilà les paramètres que j’utilise pour créer ma classe proxy en passant par mon serveur proxy :

wsdl http://www.url-du-webservice.com/WebserviceTest.asmx?WSDL /language:csharp /out:ProxyWebserviceTest.cs /proxyusername:MonLoginWindows /proxypassword:MonPasswordWindows /proxydomain:MonDomaineWindows

appel-webservice-wsdl-exe-3

Vous n’avez plus qu’à importer dans votre projet .Net le fichier qui vient d’être généré dans
C:\Program Files\Microsoft.NET\SDK\v2.0\Bin (dans notre exemple ProxyWebserviceTest.cs).
Pour cela, clic droit sur la solution / ajouter / fichier existant.

Il vous faut maintenant ajouter les références System.Web et System.Web.Services.
Pour cela Clic droit sur Référence / Ajouter une référence :

appel-webservice-wsdl-exe-4

Ajoutez les références System.Web et System.Web.Services :

appel-webservice-wsdl-exe-5

Et pour finir voilà un exemple de bout de code permettant l’appel d’une webmethod de votre Webservice :

/*
* Created by SharpDevelop.
* User: tarlay
* Date: 10/09/2008
* Time: 16:02
*/
using System;
using System.Collections.Generic;
using System.Net;

namespace TestContactUsWebservice
{
class MainClass
{
public static void Main(string[] args)
{
Console.WriteLine(« Test du webservice ! »);
try{
//Initialisation de la classe proxy
ClasseProxyDeVotreWebService myWebServiceClasse = new ClasseProxyDeVotreWebService();

//Utilisation de la classe WebProxy pour spécifier le proxy à utiliser pour la connexion au Webservice
WebProxy myProxy = new WebProxy(« http://url-de-votre-proxy:8080″);
NetworkCredential giveCred = new NetworkCredential(« MonLoginWindows », »MonPasswordWindows », »MonDomaineWindows »);
myProxy.Credentials=giveCred;
myWebServiceClasse.Proxy = myProxy;

//Appel de la webmethod
string ValueReturnByWebService = myWebServiceClasse.VotreWebMethode(« parmetres de la webmethod »);
Console.WriteLine(ValueReturnByWebService);

}catch(Exception eMsg1){
Console.WriteLine(« Erreur lors de l’appel au webservice ligne « +eMsg1.Source.ToString()+ » : « +eMsg1.Message);
}
}
}
}

Comme d’habitude, vos conseils/avis sur ce mémo perso sont les bienvenus 😉

  • http://blog.madd0.com Mauricio

    Je n’ai qu’une chose à dire : content d’utiliser Visual Studio (qui existe aussi en version gratuite ou « Express »; oui, oui, je fais mon « fan boy », et alors ? :P)

    Ceci dit, savoir utiliser wsdl.exe est une compétence très importante et quand je donne le cours sur les web services tout le monde doit s’en servir au moins une fois :)

  • http://www.geekintouch.com Icarius

    Rien a dire.

    Simple et droit au but. J’aime ce genre d’article.