[WCF] Entity Framework et service WCF consommé par Windows Phone

Dans cet article, je vais faire une introduction à WCF (Windows Communication Foundation), ainsi que l’utilisation que l’on peut en faire. Plus particulièrement, comment consommer un même service par plusieurs applications clientes ? (WPF, Windows Phone etc.)

Le code source de la solution est disponible en fin d’article.

Présentation

Comme présenté sur l’article Wikipédia, WCF est présent depuis la version 3.0 du Framework .NET. C’est une couche d’abstraction qui unifie et simplifie la mécanique d’intégration des services Web.

Etude de cas

Je suis un étudiant au lycée, et je souhaite, via une application, connaitre les détails d’une salle via son numéro.

Par exemple, dans la salle « C2125 » quel professeur fait cours, sur quelle matière? Et avec quels élèves serais-je ?

De ces besoins, déduisons-en une application à développer :

  • Base de données SQL Server (contenant la liste des élèves/professeurs leurs matières respectives) ;
  • Application Windows Phone, pour les étudiants voulant avoir les détails d’une salle ;
  • Service WCF, lié à la couche de données qui permettra d’être consommée à la fois par le client Windows Phone, mais aussi pour d’autres comme Silverlight ou WPF.

Voici les différentes étapes que nous allons suivre pour mener à bien cette étude de cas :

  1. Définition de la base de données
  2. Création du service WCF & implémentation EDMX
  3. Création du projet Windows Phone 7.1

 

I)                 Définition de la base de données

Voici le schéma de base de données à partir duquel nous allons travailler.

J’ai choisi de nommer cette base de données « [HighSchool] » et de la déployer sur une instance SQL Server 2008R2.

 

II)              Création du service WCF & implémentation EDMX

On démarre Visual Studio 2010, et l’on crée une solution vide nommée « HighSchool ».

A cette solution, on y ajoute un projet de type WCF Service Application, que l’on nommera « HighSchool.Service » :

Aussitôt le projet WCF créé, on va y ajouter un item de type ADO.NET Entity Data Model (notre fameux fichier EDMX) que l’on nommera « HighSchoolModel » :

NB : Bien entendu, dans le cadre d’un projet plus conséquent et voué à être mis en production, nous n’ajouterons pas l’EDMX directement dans le projet WCF. Il faudra à ce moment-là créer une architecture N-Tiers décomposant les différentes couches : « Business » (règles fonctionnelles), « Data » (l’EDMX), « Model » (les classes POCO issues de l’EDMX), « Service » etc.

Voici le schéma que nous obtenons une fois avoir importé les tables SQL dans notre entity data model :

Nous allons pouvoir passer à la création de notre contrat WCF puis du service proprement dit.

L’interface de notre contrat « IHighSchoolService » contiendra la suivante :

En paramètre d’entrée nous passerons le nom de la salle, et en retour l’on souhaitera recevoir les détails de la classe « Class ».

Implémentons à présent notre interface dans le fichier « HighSchoolService.svc » :

 

Encore une fois, en projet réel, il ne faudra pas utiliser les entités directes de l’EDMX mais celles des classes POCO.

Enfin, une petite configuration au niveau du web.config s’impose !

Vérifions bien que nous avons la chaîne de connection « HighSchoolEntities » liant notre source de données EDMX (ajoutée normalement automatiquement).

Puis ajoutons les balises de notre service, à savoir : le nom du service et la référence à son contrat (interface), le type de binding (basicHttp uniquement pour les applications Silverlight), le EndPoint, et un Behavior :

III)          Création du projet Windows Phone 7.1

Dernière partie de notre solution à présent : le projet Windows Phone qui consommera le service WCF précédemment créé !

Ajoutons donc un projet de type « Silverlight for Windows Phone » à notre solution.

Une fois le projet créé, nous allons faire référence à notre service WCF dans celui-ci, en faisant un clic droit sur le répertoire « References » puis en sélectionnant l’option « Add service reference … ».

Sur la fenêtre qui apparait ensuite, on peut cliquer directement sur le bouton « Discover » puis « Service in solution », cela ajoutera directement notre service à l’affichage. On nomme notre référence « HSService », clic OK et hop c’est ajouté !

Passons à présent sur l’interface utilisateur de notre application.

Voici l’interface « MainPage.xaml » Windows Phone que nous utiliserons pour requêter le service WCF :

Rapidement nous aurons donc :

–          1 champ TextBox pour la saisie de la salle de cours (paramètre d’entrée) ;

–          1 bouton qui exécutera l’appel à la méthode du service asynchrone ;

–          1 ListBox (non visible encore sur la capture d’écran) qui contiendra la liste des élèves qui participeront aux cours de cette classe.

Le détail du XAML :

Passons maintenant à l’appel de notre service !

Dans le code-behind de « MainPage.xaml », nous allons ajouter l’action lancée suite au clic du bouton « Voir détails » :

On ajoute d’abord les « using » nécessaires :

using HighSchool.HSService;

using System.Collections.ObjectModel;

Puis l’appel à la méthode asynchrone « GetClass » de notre service se fera en deux temps : ajout d’un event handler une fois la méthode exécutée, puis le passage des paramètres.

Puis enfin, en détails, le code de l’event handler de notre méthode « completed » :

Ne reste plus qu’à tester notre application 🙂

Code source : cliquez-ici.

Suggestion d'articles

Partagez:

Une réflexion au sujet de « [WCF] Entity Framework et service WCF consommé par Windows Phone »

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *