Flash info

"La connaissance ce n’est point la possession de la vérité, mais d’un langage cohérent."

Antoine de Saint Exupéry (1900-1944)

 
Accueil arrow Articles / Tutoriaux arrow Consommer des Services Web WSDL
Consommer des Services Web WSDL
Écrit par Arnaud Petitjean [MVP]   
15-12-2012

J’étais en formation C# ces derniers jours et comme c’est encore frais dans ma tête, j’ai envie de partager avec vous mon ressenti… Voilà donc chose faite à travers ce billet.

Bien que le langage C# soit très puissant, je dois avouer que j’ai été effaré de constater toute la difficulté et les efforts qu’il faut déployer pour réaliser des choses qui somme toute, semblent relativement simples. Je pèse mes mots en disant “semblent” car programmer dans un langage de programmation “de haut niveau” n’est pas toujours chose facile.

J’ai conscience qu’on ne fait pas les mêmes choses avec C# et PowerShell, je veux dire qu’à chaque usage il existe une technologie adaptée.

En effet, bien que possible, il ne serait pas souhaitable d’utiliser PowerShell pour développer une application de gestion connectée a une base de données. A l’inverse il serait totalement contre-productif que de vouloir utiliser C# pour automatiser la création en masse de comptes utilisateurs ou de faire du « provisioning » de machines virtuelles.

Bref, aujourd’hui j'ai passé la majeure partie de l’après-midi à jouer avec les Services Web (création et “consommation”). PowerShell n’ayant pas vocation à être utilisé pour créer des Services Web nous ne parlerons pas de cet aspect. Concentrons-nous donc plutôt sur leur consommation.

J’ai été surpris de la façon dont l’on crée la partie cliente d’un Service Web – le consommateur – en C#, et ce dans le bon sens du terme. En effet, à partir d’un Service Web répondant à la norme WSDL s’exécutant sur un serveur il est possible de générer automatiquement le code C# correspondant pour consommer ce dernier. La génération du code s’effectue d’au moins deux manières différentes, soit en utilisant l’utilitaire svcutil.exe, soit en utilisant des fonctionnalités avancées de Visual Studio (à partir de la version 2008).

Ceci étant, même si le gros du boulot est réalisé automatiquement à notre place, il n’est pas si simple de parvenir à avoir un code qui fonctionne. Dans mon cas, il manquait des références vers de nombreux types et j’avais beau les ajouter rien n’y faisait. Même mon formateur a été incapable de m’aider Frown… En un mot: FRUSTRANT !!!

Comme je ne suis pas du genre à baisser les bras et à m’avouer vaincu face à un ordinateur, après quelques recherches sur internet et grâce à un tuto trouvé sur blog d’un passionné, j’ai finalement réussi à faire fonctionner mon programme. Yeah!!! Quelle satisfaction !

Bilan : environ 1 heure de perdue et plus d’une centaine de lignes de code C# pour réussir à consommer un simple service Web qui pour un code de valeur boursière retourne le cours de l’action ainsi que son nom.

Pendant que je bataillais à faire marcher mon programme C# je me disais que si j’avais PowerShell v3 sous la main, ceci aurait été plié en moins de deux ! Donc aussi tôt rentré à la maison je n’ai pas pu m’empêcher d’essayer. Résultat, en 2 minutes montre en main j’avais réussi à consommer le Service Web !

Pas étonnant que de nombreux développeurs C# se mettent au PowerShell pour réaliser des tests unitaires avant de se lancer dans la programmation complexe…

Voici donc le script PowerShell en question. Vous devez utiliser PowerShell version 3 car il fait appel à la nouvelle commandelette New-WebServiceProxy :


# Récupérer le cours de bourse d'une action (en live)
PS > $uri = 'http://www.webservicex.net/stockquote.asmx?WSDL'
PS > $proxy = New-WebServiceProxy -Uri $uri
PS > $xml = [xml]$proxy.GetQuote("MS")  # Code de l’action Morgan Stanley
PS > $xml.StockQuotes.Stock

Symbol : MS Last : 18.05 Date : 12/14/2012 Time : 4:00pm Change : +0.25 Open : 17.76 High : 18.09 Low : 17.70 Volume : 16296485 MktCap : 35.636B PreviousClose : 17.80 PercentageChange : +1.40% AnnRange : 12.26 - 21.19 Earns : -0.463 P-E : N/A Name : Morgan Stanley Co

Voici un autre exemple qui fait appel à un Service Web « convertisseur de devises ».

Il est donc extrêmement facile de déterminer le cours de l’euro face au dollar et vice versa. Il est aussi possible via ce Service Web de convertir n’importe quelle devise en n’importe quelle autre devise.


# Récupérer le taux de change d'une devise en une autre
PS > $uri = 'http://www.webservicex.net/CurrencyConvertor.asmx?WSDL'
PS > $proxy = New-WebServiceProxy -Uri $uri
PS > $proxy.ConversionRate('EUR','USD')
1.3159 PS > $proxy.ConversionRate ('USD','EUR')
0.76

Remarque : il existe sur internet de nombreux Services Web gratuits permettant la réalisation de nombreuses tâches. Le site http://www.webservicex.net illustre parfaitement bien mes propos. Si ce sujet vous intéresse, je vous invite à aller y faire un petit tour. Il en existe cependant de nombreux autres aux quatre coins du Web.

Pour conclure, je dirais que j’ai bien conscience que l’on ne peut pas comparer PowerShell et C# mais je n’ai pas pu résister... Désolé Laughing.

3-4 lignes de script contre plus d’une centaine de lignes de code C#, c’est dur à battre pas vrai ?

Ceci étant dit, PowerShell n’étant pas seulement une console, mais bel et bien un moteur d’exécution de scripts utilisable depuis n’importe quel langage .NET, il y a fort à parier que des développeurs fainéants ou intelligents fassent appel à PowerShell dans leurs programmes pour se simplifier la vie pour la réalisation de certaines tâches complexes ou la performance n’est pas la priorité.

Dernière mise à jour : ( 15-12-2012 )
 
© 2017 PowerShell-Scripting.com