Comment créer une application Silverlight utilisant LinQ à travers un service WCF

21. April 2010 by Jerome.Antoine

De base Silverlight ne permet pas de se connecter à une base de données, alors que cela peut être extrêmement utile. La méthode la plus simple pour contourner ce problème est de passer par un service WCF. Voici comment faire.


1. Créer l’application Silverlight


Pour commencer nous allons créer un projet de type « Silverlight Application ». Visual Studio nous propose ici de créer automatiquement le projet web en ASP.NET qui implémentera notre application Silverlight.

 

 

 

2. Créer la page principale de l’application Silverlight


Dans le page principale de l’application Silverlight nous définissons un « DataGrid », que vous pouvez trouver dans la ToolBox, et qui est un contrôle de base permettant de mettre en forme n’importe quelle collection. Nous lui mettons un « x :Name » pour pouvoir le retrouver dans notre code behind.

 

 

3. Créer le DataContext avec LinQ to SQL


Pour pouvoir accéder à notre base de donnée nous allons utiliser LinQ to SQL, pour cela ajouter un élément de type « LinQ to SQL Classes » à votre projet Web.

 

 

Dans l’explorateur de serveur, créez une nouvelle connexion à votre base de donnée NorthWind.
Si vous n’avez pas cette base de données de test fournie par Microsoft vous pouvez la télécharger ici :
http://www.microsoft.com/downloads/details.aspx?FamilyID=06616212-0356-46a0-8da2-eebc53a68034&displaylang=en

 

Une fois votre connexion établie, parcourez la liste des tables de votre base de données et glissez-déposez la table « Employee » dans votre DataContext « NorthWind.dbml ». Vous devriez voir le schéma de la table s’afficher.
Attention, vous devez permettre la sérialisation de votre DataContext, pour ce faire changer le « Serialization Mode » dans ses propriétées, en le mettant à « Unidirectional ».

 

 

4. Créer le service WCF


Pour que l’application Silverlight puisse récupérer des données de la base de données nous allons utiliser un web service en WCF. Celui-ci s’occupera de récupérer ces données et pourra les fournir à l’application Silverlight quand celle-ci les demandera.
Pour ce faire nous allons ajouter un élément de type « WCF Service » à notre application Web.

 

 

Un service de base est constitué de deux classes : le contrat du service et la définition du service. L’application Silverlight n’aura connaissance que du contrat. Il s’agit d’un interface énonçant les méthodes que le service possède. Ici nous allons écrire une fonction simple permettant de lister les employés existant dans la base de donnée NorthWind.

 

 

 

Dans la définition du service nous écrivons ce que doit faire cette fonction. Ici nous utilisons une requête LinQ to SQL pour récupérer les employés.

 

 

Enfin pour que le service soit utilisable par l’application Silverlight nous devons définir un « endpoint », qui représente la façon dont communique le service. Ici nous devons définir le « binding » en « basicHttpBinding » pour que le service puisse communiquer avec Silverlight.

 

 

5. Ajouter la référence du service à l’application Silverlight


Une fois le service réalisé, il faut le faire connaitre à l’application Silverlight. Pour ce faire il faut ajouter une référence à ce service dans l’application Silverlight (clique droit sur « Service References » et choisir « Add a Service Reference »).
Cliquez sur « Discover » pour voir votre service et cliquez sur « OK ». Il se peut que vous ayez une erreur si vous n’avez pas compilé votre service dans l’application web avant cette étape.

 

 

 

 

Si vous deviez changer le code de votre service, pensez à faire une mise à jour de cette référence (clique droit sur « NorthWindServiceReference » et « Update Service Reference »).

 

6. Récupérer et mettre en forme les données


Pour finir nous devons utiliser notre service pour récupérer les données et les mettre en forme dans le « DataGrid » de notre application Silverlight. Pour ce faire nous devons tout d’abord récupérer une instance du service. Ensuite nous devons abonner cette instance à l’événement « getEmployeesCompleted » pour que lorsque le service ait fini de récupérer les employés, soit appelée une méthode, ici « serviceNorthWind_getEmployeesCompleted ».
Dans cette méthode nous pouvons mettre la liste des employés récupérée comme source de notre « DataGrid ».

 

 

7. Test de l’application

 

 

ASP.NET AJAX, C#, Silverlight , , , , ,