.NET DotNet CF - 3

14
Développement d’applications mobiles sur .net Compact Framework Tébourbi Riadh SUP’COM 2005 Partie 3 Les Web Services Mise à jour Décembre 2006

description

.NET

Transcript of .NET DotNet CF - 3

Page 1: .NET DotNet CF - 3

Développement d’applications mobiles sur .net Compact Framework

Tébourbi Riadh

SUP’COM

2005

Partie 3

Les Web ServicesMise à jour Décembre 2006

Page 2: .NET DotNet CF - 3

.NET Compact Framework, Tébourbi Riadh, SUP’COM

2

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éeservices.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.

Page 3: .NET DotNet CF - 3

.NET Compact Framework, Tébourbi Riadh, SUP’COM

3

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.

Page 4: .NET DotNet CF - 3

.NET Compact Framework, Tébourbi Riadh, SUP’COM

4

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

Page 5: .NET DotNet CF - 3

.NET Compact Framework, Tébourbi Riadh, SUP’COM

5

Observons maintenant le code généré par VS 2005 :

Imports System.WebImports System.Web.ServicesImports System.Web.Services.Protocols

<WebService(Namespace:="http://tempuri.org/")> _<WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _Public Class Service Inherits System.Web.Services.WebService

Page 6: .NET DotNet CF - 3

.NET Compact Framework, Tébourbi Riadh, SUP’COM

6

<WebMethod()> _ Public Function HelloWorld() As String Return "Hello World" 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.

Page 7: .NET DotNet CF - 3

.NET Compact Framework, Tébourbi Riadh, SUP’COM

7

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é):

Page 8: .NET DotNet CF - 3

.NET Compact Framework, Tébourbi Riadh, SUP’COM

8

<?xml version="1.0" encoding="utf-8" ?><string xmlns="http://tempuri.org/">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="1.0" encoding="utf-8" ?><int xmlns="http://tempuri.org/">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 » :

Page 9: .NET DotNet CF - 3

.NET Compact Framework, Tébourbi Riadh, SUP’COM

9

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

Page 10: .NET DotNet CF - 3

.NET Compact Framework, Tébourbi Riadh, SUP’COM

10

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

Page 11: .NET DotNet CF - 3

.NET Compact Framework, Tébourbi Riadh, SUP’COM

11

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 SubEnd 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) :

Page 12: .NET DotNet CF - 3

.NET Compact Framework, Tébourbi Riadh, SUP’COM

12

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 = "./flags/"

If (Nom <> "?") Then MyImg = New Bitmap(HttpContext.Current.Server.MapPath(FlagDir + Nom + ".jpg")) Else MyImg = New Bitmap(HttpContext.Current.Server.MapPath(FlagDir + "unknown.jpg")) 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 = "./App_Data/" Dim myDs As New DataSet("dbpays") Dim myDt As DataTable = myDs.Tables.Add("pays") myDt.Columns.Add("NOM", System.Type.GetType("System.String")) myDt.Columns.Add("POPULATION", System.Type.GetType("System.String")) myDt.Columns.Add("DEVISE", System.Type.GetType("System.String")) myDt.Columns.Add("SURFACE", System.Type.GetType("System.String")) myDt.Clear()

' Make the NOM column the primary key column. Dim PrimaryKeyColumns(0) As DataColumn PrimaryKeyColumns(0) = myDt.Columns("NOM")

Page 13: .NET DotNet CF - 3

.NET Compact Framework, Tébourbi Riadh, SUP’COM

13

myDt.PrimaryKey = PrimaryKeyColumns

myDs.ReadXml(HttpContext.Current.Server.MapPath(DataDir + "pays.xml")) Dim myrow As DataRow = myDt.Rows.Find(country) Dim p As pays If myrow IsNot Nothing Then p = New pays(country, Integer.Parse(myrow("POPULATION").ToString), myrow("DEVISE").ToString(), Integer.Parse(myrow("SURFACE").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.payspays = New pays_service.pays

Page 14: .NET DotNet CF - 3

.NET Compact Framework, Tébourbi Riadh, SUP’COM

14

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.DrawingImports System.Drawing.ImagingImports System.IOImports System.DataImports 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) HandlesMyBase.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 SubEnd Class