13fév. 2014

WCF : Retourner une interface au client

Nous allons voir comment retourner une interface depuis une méthode d'un service web WCF.

Coté WebService

WCF fournit un attribut ServiceKnownType qui permet de déclarer des KnownType au niveau de l'interface ServiceContract d'un service:

[ServiceContract(Namespace = "MyNameSpace.MyWebServices", 
    Name = "MyService")]
[ServiceKnownType(typeof(MyObject))]
public interface IMyServiceInterface {
    ...
}

Ici nous avons un ServiceContract définit sur l'interface IMyServiceInterface.

Coté modèle

Au niveau du ServiceContract, nous avons informé WCF d'un ServiceKnownType de type MyObject.

Il faut donc décorer MyObject avec DataContract :

[DataContract]
public class MyObject: IMyObject
{
    [DataMember]
    public string SomeProperty {
        get;
        set;
    }
}

La classe MyObject implémente l'interface IMyObject.

Déclarer la méthode dans le ServiceContract

Ajoutons maintenant une méthode dans notre ServiceContract :

[ServiceContract(Namespace = "MyNameSpace.MyWebServices", 
    Name = "MyService")]
[ServiceKnownType(typeof(MyObject))]
public interface IMyServiceInterface {

    [OperationContract]
    public IMyObject GetAllTheThings() {
        ...
    }
}

Et c'est fini :).

A noter qu'il possible d'appliquer le ServiceKnownType au niveau du ServiceContract ou de l'OperationContract :

[ServiceContract(Namespace = "MyNameSpace.MyWebServices", 
    Name = "MyService")]
public interface IMyServiceInterface {

    [OperationContract]
    [ServiceKnownType(typeof(MyObject))]
    public IMyObject GetAllTheThings() {
        ...
    }
}

Enjoy !

un commentaire

1. Le jeudi, février 13 2014, 14:56 par Peter

Merci pour l'info tu viens de sauver mon projet !

Fil des commentaires de ce billet

Ajouter un commentaire

Le code HTML est affiché comme du texte et les adresses web sont automatiquement transformées.