2. .NET Compact Framework, Tébourbi Riadh, SUP’COM
I. Introduction
Les web services est une technologie WEB nouvelle permettent l’invocation de fonctions distantes,
présentes sur des systèmes distribués et hétérogènes, grâce au protocole HTTP et à XML. C’est un
mécanisme de communication entre serveurs de données et d’applications selon une architecture orientée
services.
Dans une architecture orientée services (SOA, Service Oriented Architechture), le système d’information est
structuré afin que ses ressources (données, traitements) soient accessibles uniquement par routage de
messages entre interfaces réseau.
SOA est une approche de type client/serveur selon laquelle une application est un ensemble de services
logiciels et de consommateurs de services (également appelés clients).
Pour être plus claire, un service web est un composant applicatif mis à la disposition sur un réseau et
disposant de méthodes que l’on peut invoquer à distance via l’emploi de protocoles standards. Les services
Web présentent l’avantage d’être indépendants des plateformes et réutilisables. Un web service est une
interface qui décrit un ensemble d’opérations accessibles via un réseau par des messages XML standards.
Les WebServices sont apparus pour faciliter la tâche des développeurs pour distribuer leurs applications.
Contrairement aux idées reçues, Microsoft n’a pas créé les WebServices mais a participé avec de grandes
entreprises telles que IBM, SUN, etc. à la standardisation des WebServices.
II. Fonctionnement
Les services Web sont une technologie permettant à des applications de dialoguer via Internet, par
l’échanges de messages fondé sur des standard (XML), et ceci indépendamment des plate-formes et des
langages sur lesquelles elles reposent. Il ya des acteurs principaux dans l’utilisation des services Web :
- Le fournisseur de services qui publie le service ;
- Le demandeur de service qui demande l’utilisation d’un service
- L’annuaire de service (optionnel) qui est lui-même un fournisseur de service permettant de
répertorier l’ensemble des fournisseurs de services. Sa présence n’est pas indispensable pour que
l’échange ait lieu, il suffit que le demandeur ait connaissance de l’adresse (URL) du fournisseur du
service, sans nécessité de référencement systématique du service dans un annuaire.
2
3. .NET Compact Framework, Tébourbi Riadh, SUP’COM
Les deux principaux protocoles utilisés pour un échange basique entre demandeur et fournisseur sont basés
sur le WSDL et SOAP.
Description du service : WSDL
La norme WSDL (Web Service Description Language) est fondée sur XML. Elle permet de spécifier le
format de messages, les protocoles qui doivent être utilisés et la localisation des différentes machines qui
mettent en œuvre un Service Web. Elle définit un format de document qui permet de décrire l’interface d’un
Service Web. Un document WSDL contient les informations suivantes :
- L’adresse du service web correspondant ;
- La manière dont les applications vont interopérer avec le Web Service (le Binding)
- Les opérations (une opération est une séquence d’envoies de messages) à effectuer
Pour chacune de ces opérations, le document précise :
- Quel type de protocole de transport utiliser ;
- Sur quelles règles d’encodage se baser pour échanger des messages ;
- Quels messages seront échangés lors de cette opération
Le document WSDL contient donc toutes les informations nécessaires pour permettre à une application
cliente de découvrir et communiquer avec le Service Web qu’il décrit. WSDL permet de décrire les services
comme un ensemble d’opérations et de messages abstraits reliés (Bind) à des protocoles et des serveurs
réseaux.
En résumé, chaque WebService possède un fichier de spécification : c’est ce qu’on appelle la WSDL. C’est
à partir de ce fichier que le développeur pourra savoir comment interroger le WebService, quels sont ses
différentes WebMethods, quels types ces WebMethods retournent t-elles.
3
4. .NET Compact Framework, Tébourbi Riadh, SUP’COM
SOAP
Le principal objectif du protocole SOAP (Simple Object Access Protocol) est de permettre la normalisation
des échanges de données. C’est un standard définissant un protocole indépendant du transport, qui assure
des appels de procédures à distance (RPC) s’appuyant principalement sur le protocole http et sur XML.
Pour vulgariser ce dernier protocole, SOAP permet de faire circuler du XML via du HTTP. Donc lorsqu’on
interroge un WebService, les données sont transmises en XML via le port 80 (HTTP). Rien de plus simple
ensuite pour le développeur de traiter l’information reçue.
III. Création d’un premier Web Service avec VS 2005 .NET
III.1 création du Web Service sur le serveur
Nous allons apprendre à créer un Web Service simple avec Visual Studio 2005. Ce Web Service contient
deux Web Méthodes ; une méthode qui retourne une chaine de caractères et une autre qui calcule la somme
deux entiers et retourne un résultat.
Sur VS 2005 cliquez sur « File New Web Site ». Dans la fenêtre qui s’ouvre sélectionnez comme type
de projet « Asp .NET Web Service » (langage VB) et comme nom du Web Service « premier_ws ».
4
5. .NET Compact Framework, Tébourbi Riadh, SUP’COM
Observons maintenant le code généré par VS 2005 :
Imports System.Web
Imports System.Web.Services
Imports System.Web.Services.Protocols
<WebService(Namespace:=quot;http://tempuri.org/quot;)> _
<WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Public Class Service
Inherits System.Web.Services.WebService
5
6. .NET Compact Framework, Tébourbi Riadh, SUP’COM
<WebMethod()> _
Public Function HelloWorld() As String
Return quot;Hello Worldquot;
End Function
End Class
Une classe correspondant à ce Web Service appelée Service a été créée. Une Web Méthode (HelloWorld) a
été également rajoutée automatiquement afin de vous aider à créer vos propres Web Méthodes. La Web
Méthode HelloWorld retourne tout simplement un message « Hello World » et n’a pas d’arguments.
Nous allons rajouter une Web Méthode qui accepte deux arguments entiers et retourne un entier résultat de
la somme des deux entiers :
<WebMethod()> _
Public Function Somme(ByVal a As Integer, ByVal b As Integer) As Integer
Return a + b
End Function
Pour tester le web service cliquez sur le bouton « Start Debugging », le Framework génère une page web qui
permet de tester toutes ses méthodes :
Pour visualiser le contenu du fichier descriptif de ce Web Service (le fameux fichier WSDL) vous pouvez
cliquer sur le lien « Description du service » de la page web. Le fichier WSDL est alors affiché. Sachez que
pour faire fonctionner votre web service vous n’avez pas à comprendre pour l’instant le contenu de ce
fichier. Il faut savoir que ce fichier est communiqué à toute application désirant utiliser ce Web Service afin
qu’elle puisse connaître, entre autre, ces Web Méthodes et les structures de données utilisées.
6
7. .NET Compact Framework, Tébourbi Riadh, SUP’COM
Nous allons tester les Web Méthodes de notre Web Service, pour cela revenez à la page précédente du
navigateur et cliquez sur « HelloWorld », une interface vous proposant de tester cette Web Méthode est alors
affichée :
Cliquez sur « Appeler », le résultat de la Web Méthode est alors affiché (remarquez le type string retourné):
7
8. .NET Compact Framework, Tébourbi Riadh, SUP’COM
<?xml version=quot;1.0quot; encoding=quot;utf-8quot; ?>
<string xmlns=quot;http://tempuri.org/quot;>Hello World</string>
Notez que, comme nous l’avons précisé au début de ce document, le format utilisé pour échanger des
données entre le Web Service et l’application cliente est le XML.
Testez maintenant l’autre Web Méthode « Somme », une interface vous proposant d’introduire les deux
entiers est affichée :
De même l’appel de cette méthode génère un résultat au format XML (remarquez le type int retourné):
<?xml version=quot;1.0quot; encoding=quot;utf-8quot; ?>
<int xmlns=quot;http://tempuri.org/quot;>19</int>
III.1 Création d’une application cliente
Nous allons apprendre d’abord comment utiliser notre WebService dans le cadre d’une application
Windows.
Dans VS 2005 créer une application Windows « windows_client » ; « File New Project » :
8
9. .NET Compact Framework, Tébourbi Riadh, SUP’COM
En utilisant deux « TextBox » un « Label » créer une interface graphique permettant de rentrer deux entiers
et d’afficher le résultat de leur somme quand on clique sur un bouton « = » :
Pour utiliser un Web Service, il faut ajouter une Web Référence. L'ajout de la Web Référence va permettre
de créer une class Proxy qui vas faire la jonction entre le service Web et votre code.
Cette classe Proxy va vous permettre de faire la relation entre votre application et le WebService.
Dans « Solution Explorer » ajouter une « Web Reference » : « Clic droit Add Web Reference ».
9
10. .NET Compact Framework, Tébourbi Riadh, SUP’COM
Dans la fenêtre qui s’ouvre tapez l’URL du Web Service et cliquez sur « Go » :
Vous pouvez modifier le nom de référence du service dans votre application (par défaut « localhost »), par
exemple « somme ». Une fois le Web Service est « découvert », cliquez sur « Add Reference ».
10
11. .NET Compact Framework, Tébourbi Riadh, SUP’COM
Nous voulons à présent appeler la méthode « somme» du web service lorsqu'on clique sur le bouton « = » de
l'interface. Pour cela dans la méthode associée au « Click » sur le bouton « = »:
- Créez une instance de la classe « somme » qui représente notre WebService :
Dim sommeservice As New somme.Service()
- Appelez la Web Méthode « somme » à partir de l'instance que vous venez de créer et insérer le
résultat dans une TextBox. :
Dim r As Integer
r = sommeservice.Somme(Integer.Parse(a.Text), Integer.Parse(b.Text))
result.Text = r.ToString
Notons que nous utilisons Integer.parse(untexte) pour convertir un texte (« parser ») en un entier.
Voici le code entier correspondant à l'événement « Click » du bouton :
Public Class Form1
Private Sub egal_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles egal.Click
Dim sommeservice As New somme.Service()
Dim r As Integer
r = sommeservice.Somme(Integer.Parse(a.Text), Integer.Parse(b.Text))
result.Text = r.ToString
End Sub
End Class
Enfin, exécuter l’application et tester le Web Service.
Il est évident que nous n’avons pas besoins d’un Web Service pour calculer la somme de deux entiers, cet
exemple n’est qu’une démonstration de la façon avec laquelle les Web Services sont très simples à
développer sur la plateforme .Net. Nous allons créer maintenant un WebService qui effectue des tâches et
retourne des données bien plus complexes et nous allons créer un client sur plateforme mobile.
IV Création du Web Service pays
Nous allons reprendre l’application développée en locale dans la partie II de ce cours utilisant les
informations sur des pays. Nous allons non plus utiliser une base de données en locale sur le mobile mais
servir les informations d’un pays donné en utilisant un Web Service. L’application cliente envoie une
requête au Web Service pour lui demander des informations sur un pays particulier et le Web Service
consulte une base de données au format XML sur le serveur et renvoie un objet de type « pays » qui
encapsule toutes les données le concernant.
Phase I : Création du Web Service
Commencez par créer le web service «pays ». Dans « Solution Explorer » du Web Service commencez par
ajouter le fichier « pays.xml » dans le répertoire « App_Data ».
Créez également un répertoire « flags » et ajoutez-y les fichiers jpeg (les drapeaux des pays) :
11
12. .NET Compact Framework, Tébourbi Riadh, SUP’COM
Implémentez ensuite la classe pays comme vous l’avez fait lors de l’application « dbpays_vb » dans la partie
II. Dans la méthode setDrapeau(), utilisez la Classe HttpContext.Current.Server et la méthode MapPath pour
accéder au répertoire physique sur le serveur d’un répertoire virtuel.
Private Sub setDrapeau()
Dim MyImg As Image
Dim FlagDir As String
FlagDir = quot;./flags/quot;
If (Nom <> quot;?quot;) Then
MyImg = New Bitmap(HttpContext.Current.Server.MapPath(FlagDir + Nom +
quot;.jpgquot;))
Else
MyImg = New Bitmap(HttpContext.Current.Server.MapPath(FlagDir +
quot;unknown.jpgquot;))
End If
Dim MemStr As New MemoryStream()
MyImg.Save(MemStr, ImageFormat.Jpeg)
Me.pDrapeau = MemStr.GetBuffer()
End Sub
Implémenter enfin la WebMéthode getPays qui prend en argument un nom de pays et retourne un objet de
type pays.
<WebMethod()> _
Public Function GetPays(ByVal country As String) As pays
Dim DataDir As String
DataDir = quot;./App_Data/quot;
Dim myDs As New DataSet(quot;dbpaysquot;)
Dim myDt As DataTable = myDs.Tables.Add(quot;paysquot;)
myDt.Columns.Add(quot;NOMquot;, System.Type.GetType(quot;System.Stringquot;))
myDt.Columns.Add(quot;POPULATIONquot;, System.Type.GetType(quot;System.Stringquot;))
myDt.Columns.Add(quot;DEVISEquot;, System.Type.GetType(quot;System.Stringquot;))
myDt.Columns.Add(quot;SURFACEquot;, System.Type.GetType(quot;System.Stringquot;))
myDt.Clear()
' Make the NOM column the primary key column.
Dim PrimaryKeyColumns(0) As DataColumn
PrimaryKeyColumns(0) = myDt.Columns(quot;NOMquot;)
12
13. .NET Compact Framework, Tébourbi Riadh, SUP’COM
myDt.PrimaryKey = PrimaryKeyColumns
myDs.ReadXml(HttpContext.Current.Server.MapPath(DataDir + quot;pays.xmlquot;))
Dim myrow As DataRow = myDt.Rows.Find(country)
Dim p As pays
If myrow IsNot Nothing Then
p = New pays(country, Integer.Parse(myrow(quot;POPULATIONquot;).ToString),
myrow(quot;DEVISEquot;).ToString(), Integer.Parse(myrow(quot;SURFACEquot;).ToString))
Else
p = New pays()
End If
myDt.Clear()
Return p
End Function
Phase II : Création de l’application cliente sur le mobile
Créez une application Vb pour Windows Mobile « pays_client ». Reprenez la même interface graphique que
vous avez réalisé lors de la partie II de ce cours afin d’afficher les informations d’un pays et ajoutez-y un
« TextBox » (appelé Surl) pour que l’utilisateur puisse entrer l’URL du Web Service (l’URL peut être
dynamique):
En exercice vous pouvez maintenant vous-même faire appel au web service lorsque l’utilisateur clique sur le
bouton « Infos », récupérer un objet de la classe pays et afficher ses informations. Il faut savoir que pour
créer une instance de la classe pays dans votre application il faut utiliser votre classe WebService
(référencée par pays_service) de la façon suivante :
Public pays As pays_service.pays
pays = New pays_service.pays
13
14. .NET Compact Framework, Tébourbi Riadh, SUP’COM
Ceci est possible grâce au Web Services même si la classe « pays » est déclarée sur le serveur (le fichier
WSDl) contient toutes les informations concernant cette classe, ce fichier est « découvert » par votre
application lorsque vous ajouter la « Web Reference ». Enfin, pour accéder à l’URL de l’instance de votre
Web Service (appelée pservice par exemple), il faut utiliser sa propriété URL :
Pservice.Url = votre_url
Voici le code de la classe Form1 :
Imports System.Drawing
Imports System.Drawing.Imaging
Imports System.IO
Imports System.Data
Imports System.xml
Public Class Form1
Public pservice As New pays_service.Service()
Public pays As pays_service.pays
Dim objBitmap As Bitmap
Dim strmBuffer As MemoryStream
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles
MyBase.Load
pservice.Url = Surl.Text
End Sub
Private Sub Rech_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Info.Click
pservice.Url = Surl.Text
pays = New pays_service.pays
pays = pservice.GetPays(Npays.Text)
Pop.Text = pays.pPopulation
Surf.Text = pays.pSurface
Dev.Text = pays.pDevise
Npays.Text = pays.pNom.ToString
strmBuffer = New System.IO.MemoryStream(pays.pDrapeau)
objBitmap = New Bitmap(strmBuffer)
Flag.Image = objBitmap
End Sub
End Class
14