# Saturday, October 25, 2008

Partager des DataContracts entre WebServices avec Silverlight

Les différents webservices d’une même application ont parfois besoin de partager les mêmes structures de données. Par défaut, lors de l’ajout de ces webservices à la solution, Silverlight duplique les classes de données générées.

Imaginons un DataContract User retourné par un webservice Users.svc qui gère les utilisateurs et utilisé dans webservice Rights.svc qui gère les droits de l’application.

    [DataContract]

    public class User

    {

        [DataMember]

        public string FirstName { get; set; }

 

        [DataMember]

        public string LastName { get; set; }

 

    }

 

    [ServiceContract(Namespace = "")]

    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]

    public class Users

    {

        [OperationContract]

        public User GetUsers()

        {

            return new User { FirstName = "Thierry", LastName = "Bouquain" };

        }

    }

 

    [ServiceContract(Namespace = "")]

    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]

    public class Rights

    {

        [OperationContract]

        public User AssignUserRights(User user)

        {

            return user;

        }

    }

solution Pour partager le datacontract User dans les classes générées, il suffit de créer la même classe User avec le même namespace dans un project silverlight et de le référencer dans l’application silverlight.
Une fois les références des webservices mise à jours, la classe User ne sera plus générée.

Pour éviter de dupliquer les datacontracts, il est possible de créer un projet silverlight qui utilise les mêmes fichiers côté client et côté serveur.
Evidement, dans ce cas, le code du DataContract ne peux référencer des objets serveurs qui n’existent pas côté silverlight.

Je vous invite à regarder le projet attaché à ce post.

 

 

 

 

 

 

 

#    Comments [0] |