Le Web-Service

Le ServiceWeb

Version PDF

Les cas d'utilisation décrivant l'authentification, le chargement du contexte et l'édition de la facture nécessite une communication entre l'application WinForm et l'application PDA.
Plusieurs technologies sont possibles ; nous allons ici privilégier la mise en œuvre de Services Web.
Un Service Webpermet d'invoquer à distance l'activation d'une méthode, en utilisant une connexion web (protocole http) et une description des flux résultats au format XML.
Nous allons décrire pas à pas la création d'unWeb Service ainsi que son utilisation.

1. Cas d'utilisation : authentification du serveur

Acteur : le consommateur du Service Web(dans notre cas, il s'agira du PDA)
Scénario nominal
1. Le consommateur fournit un nom d'utilisateur et un mot de passe
2. Le serveur de ServiceWeb retourne l'identifiant, le nom et le prénom du serveur

Scénario alternatif
2.1 Les informations fournies ne sont pas valides. Des champs vides sont retournés. Fin du cas

1- Création d'un Service Web

A partir de l'explorateur de solutions, ajouter nouveau site web à la solution ; choisir un Service Web et nommer le AntoineWS :


Création d'un Service Web

Un service est créé -Service.asmx - ; il ressemble à tout autre formulaire : il bénéficie d'un mode design et peut supporter du code C#.
Testons le service fourni en exemple :

Travail à faire
- Enlever (si besoin) les commentaires de la méthode HelloWord

[WebMethod]
public string HelloWorld()
    {
        return "Hello World";
     }

- Indiquer que Service Web est le projet de démarrage (click droit sur AntoineWS/définir comme projet de démarrage)
- Lancer la solution.

Une page Web s'ouvre sur l'url, correspondant au nom du service


Lancement du Service Web

Nous pouvions tester le service en tapant directement l'url dans un navigateur.
Si nous cliquons sur le lien HelloWord et demandons ensuite son appel, une page contenant la valeur de retour de la fonction, au format XML, est visible :


Valeur de retour de la fonction HelloWord

Après avoir observé la mise en oeuvre d'un service Web, nous allons maintenant définir une méthode permettant de réaliser le cas d'utilisation d'authentification.
Commençons par supprimer du projet la méthode HelloWord, et écrivons la signature suivante :

[WebMethod]
public string[] getIdentiteServeur(string user, string motDePasse)
{

}

Remarque : l'attribut [WebMethod] est obligatoire.

Comme nous l'avons fait pour l'application WinForm, nous allons déporter le code d'accès à la base de données dans la DLL LibDB.
Ajoutons un nouveau composant dans la DLL :


Ajout d'un composant dans la DLL

Remarque : nous aurions pu écrire les nouvelles méthodes dans le même composant, nous avons choisi distinguer les deux composants en fonction de leurs rôles.

En mode conception, ajoutons un DataSet typé (DSRestaurant) (à partir des composants LibDB) :

Nommons-le dsRestaurant et glissez le ServeurTableAdapter et nommez le adapterServeur

Ouvrir le fichier DSRestaurant.xsd et ajoutez une requête d’accès à la table SERVEUR par le code Connexion et le Mot de Passe et nommez la FillByUserMdp

SELECT id, nom, prenom, dtEmbauche, codeConnexion, motDePasse FROM dbo.SERVEUR

where CodeConnexion = @user and motDePasse = @mdp

Travail à faire
Dans la FacadeWS ajouter la méthode :

public string[] GetInfoServeur(string user, string mdp)
{
     adapterServeur.FillByUserMdp(dsRestaurant.SERVEUR, user, mdp);
     string id = "";
     string nom = "";
     string prenom = "";
     if (dsRestaurant.SERVEUR.Rows.Count != 0)
     {
          DataRow dr = dsRestaurant.SERVEUR.Rows[0];
          id = dr[0].ToString();
          nom = dr[1].ToString();
          prenom = dr[2].ToString();
     }
     string[] t ={ id, nom, prenom };
     return t;
}

Remarque : ne pas oublier d'ajouter les clauses using :
using System.Data;
using System.Data.SqlClient;

Generez le composant FacadeWS

Dans le WebService, ajouter une référence à la DLL :


Ajout de la référence

Ne pas oublier la clause using LibDB;

Ecrire ensuite la méthode :
[WebMethod]
public string[] getIdentiteServeur(string user, string motDePasse)
{
FacadeWS f = new FacadeWS();
return f.GetInfoServeur(user,motDePasse);

}

Générer le projet Web Service et le lancer.

Le navigateur propose le Service Web :


Lancement du Service Web

La page attend les paramètres de la méthode :


Paramètres de la méthode du Service Web

L'appel retourne un fichier XML :

La logique des Web Service n'est bien sûr pas de visualiser le fichier XML mais de le traiter dans une application cliente. Ce sera le rôle de l'application PDA.

Après avoir décrit les différentes étapes de la définition d'un Web Service, nous allons pouvoir traiter les différents cas d'utilisation utilisant des Web Service.

2. Cas d'utilisation : Environnement serveur

Acteur : le consommateur du Web Service (dans notre cas, il s'agira du PDA)
Scénario nominal
1. Le consommateur fournit un identifiant serveur
2. Le serveur de ServiceWeb retourne un DataSet Typé (DSRestaurant) contenant :
            Les familles de Plats (cf. Annexe 1 : Famille)
            Les Plats (cf. Annexe 1 : Plat)
            Les tables attribuées ce jour au serveur (cf. Annexe 1 : TableService)
            Les notes du jour (cf. Annexe 1 : Note)
            Le détails des notes du jour non facturée (cf. Annexe 1 : RegrouperJS)

Travail à faire
Ouvrir le fichier DSRestaurant.xsd et ajoutez les TableAdapteur et requêtes SQL nécessaires pour réaliser la méthode suivante dans FacadeWS :

public DSRestaurant getDonneesServeur(string idServeur)
{
    adapterFamille.FillByLibelle(dsRestaurant.FAMILLE);
    adapterPlat.FillBydesignation(dsRestaurant.PLAT);
    Guid idS = new Guid(idServeur);
    adapterTableService.Fill(dsRestaurant.TableService, idS, DateTime.Now.Date);
    adapterNote.FillBydtJServeur(dsRestaurant.NOTE, DateTime.Now.Date, idS);
    adapterRegrouperJS.FilldtJIdS(dsRestaurant.RegrouperJS, DateTime.Now.Date, idS);
    return dsRestaurant;
}

Ecrire la méthode suivante dans le fichier service.asmx

[WebMethod]
public DSRestaurant getDonneesServeur(string idServeur)
{
    FacadeWs f = new FacadeWs();
    return f.getDonneesServeur(idServeur);
}

Générer le projet Web Service et le lancer.

Le navigateur propose le Service Web :


Lancement du Service Web

 

La page attend les paramètres de la méthode :

L'appel retourne un fichier XML :

 

 

3. Cas d'utilisation : Préparation des Plats

Acteur : le consommateur du Web Service (dans notre cas, il s'agira du PDA)
Scénario nominal
1. Le consommateur fournit au serveur web un DataSet et un numéro de note
2. Le serveur de ServiceWeb exploite ce DataSet contenant :
            Une DataTable Note avec comme première ligne la note dont le numéro est passé en paramètre. Si cette note n’existe pas en base la créer.
            Une DataTable (RegrouperJS) contenant les plats à préparer. Pour chaque plat, vérifier si ce plat existe déjà pour cette note et ce jour ; si c’est le cas, ajouter la quantité à l’occurrence de la base sinon créer l’occurrence.

Travail à faire
Ouvrir le fichier DSRestaurant.xsd et ajoutez les requêtes SQL nécessaires pour réaliser la méthode suivante dans FacadeWS :

public void insereNote(DataSet ds, int idNote)
{   

}

Ecrire la méthode suivante dans le fichier service.asmx

[WebMethod]
public void insereNote(DataSet dsAPreparer, int idNote)
{
    FacadeWs f = new FacadeWs();
    f.insereNote(dsAPreparer, idNote);
}

Ne pas oublier la clause using System.Data;
Pour tester cette méthode :

  • Mettre en commentaire le DataSet dans la signature de la méthode
  • Créer un DataSet.
  • Utiliser la méthode ReadXml(« chemin du fichier xml ») du DataSet. (Télécharger un exemple de fichier)

4. Cas d'utilisation : Facturation d’une note

Acteur : le consommateur du Web Service (dans notre cas, il s'agira du PDA)
Scénario nominal
1. Le consommateur fournit au serveur web un numéro de note et un identifiant serveur
2. Le serveur de ServiceWeb recherche la note pour ce serveur et le jour:
            modifie la note colonne Facturee = true.
            et renvoie son montant total.

Travail à faire
Ouvrir le fichier DSRestaurant.xsd et ajoutez les requêtes SQL nécessaires pour réaliser la méthode suivante dans FacadeWS :

 public decimal factureNote(int idNote, string idServ)
{     

}

 Ecrire la méthode suivante dans le fichier service.asmx

public decimal factureNote(int idNote, string idServ)
{
FacadeWs f = new FacadeWs();
ret
urn f.factureNote(idNote, idServ);
}

Générez et exécutez l’application

Vous devez obtenir :

 

Pour que ce Web Service puisse être utilisé à partir d’un PDA il faut le publier.

Publication du Service Web

Ouvrir le serveur IIS (Démarrer, Paramètres, Panneau de Configuration, Outils d’administrateur :

Sélectionner Services Internet (IIS)
Créer un nouveau repértoire virtuel :

Puis Suivant et Terminer.

Tester à partir de l’explorateur en saisissant dans l’url : http://localhost/Antoine2007XC/service.asmx

 

Vous devez obtenir :

 

 


ANNEXE 1

Le DataSet typé DSRestaurant doit continir les DataTables suivantes :

TableService (tables attribuées au serveur pour ce service) :
idServeur
id (identifiant de la table attribuée au serveur ce jour)
nbPlaces (nombre de places de la table)
occupe (0 pour une table vide, 1 si occupée) : colonne ajoutée dans le Service Web

Famille (triée par libellé) :
id
libelle

Plat (triée par désignation)
id
designation
prix
idFamille

Note (notes du jour pour le serveur triée par idNote) :
dateJour
id
idTableService
nbCouverts
facturee

RegrouperJS (contenus des notes non facturées du jour pour le serveur) :
designation (du plat)
idPlat
idServeur
dateJour
idNote
quantite
prepare
idFamille