Michaël Gallego

This is my blog. What can you expect here? Well... Zend Framework 2, Amazon AWS...

Twitter

Google+

LinkedIn

Github

Last.fm

Comment partager des types avec plusieurs clients WCF ?

Lorsque l’on utilise des services WCF afin de communiquer entre le serveur et l’application cliente (dans mon cas une application Windows Phone, donc du Silverlight), chaque importation du service au sein de l’application cliente génère ses propres proxys pour les services et les Data Contracts.

Ceci signifie donc que toutes mes modèles sont importés plusieurs fois, sous différents espaces de nom, ce qui m’a posé quelques soucis puisque plusieurs de mes services utilisent les mêmes modèles et, donc, j’obtiens des erreurs de type incompatibles.

La solution consiste à créer un projet de bibliothèque de classes Silverlight, dans lequel on ajoute les classes à partager (afin d’éviter à maintenir à jour deux copies différentes, faites “Ajouter un élément existant”, sélectionnez les fichiers à ajouter, puis cliquez sur le petit triangle à côté de “Ajouter” et sélectionnez “Ajoutez en tant que lien”), puis d’ajouter la référence de ce projet Silverlight dans l’application Windows Phone (ou tout autre application Silverlight).

Mettez à jour les services, recompilez, et vous devriez voir un nouveau dossier “DataSources” apparaître dans le dossier du projet.

A noter que j’ai rencontré un autre petit soucis : en effet, mes objets POCO étaient annotés avec certains attributs, tels que [Table] ou [ForeignKey]. Or ces annotations se résident dans le fichier EntityFramework.dll, qui évidemment ne peut pas être importé dans une application Silverlight.

Vous n’avez donc d’autre choix que de supprimer toutes ces annotations de vos objets POCO, et d’effectuer ces opérations dans la fonction OnModelCreating du context.