Your SlideShare is downloading. ×
.NET DotNet CF - 3
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Saving this for later?

Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime - even offline.

Text the download link to your phone

Standard text messaging rates apply

.NET DotNet CF - 3

610
views

Published on

.NET

.NET

Published in: Technology

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
610
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
36
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. 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
  • 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