J'ai besoin d'appeler des opérations webservice en utilisant le standard wsdl, mais les objets de données doivent être différents dans le client et dans le serveur.Comment utiliser l'interface en tant que DataContract dans WCF
Utilisation d'interfaces pour les objets de données dans une bibliothèque commune, en créant des classes de proxy pour le client et le serveur. Puis, je déclare un contrat d'opération en utilisant l'interface, mais WCF ne le reconnaît pas.
J'ai pourtant essayé d'utiliser DataContractSerializerBehavior et de définir les types connus, pas encore de succès.
Quelqu'un peut-il m'aider? J'ai joint une solution complète avec plus de détails.
public interface Thing
{
Guid Id {get;set;}
String name {get;set;}
Thing anotherThing {get;set;}
}
[DataContract]
public class ThingAtServer: BsonDocument, Thing // MongoDB persistence
{
[DataMember]
Guid Id {get;set;}
//...
}
[DataContract]
public class ThingAtClient: Thing, INotifyPropertyChanged // WPF bindings
{
[DataMember]
Guid Id {get;set;}
//...
}
[ServiceContract]
public interface MyService
{
[OperationContract]
Thing doSomething(Thing input);
}
Cliquez ici voyez un Sample project on GitHub avec TestCases
Vous » ne montre pas comment 'Thing' est défini - a-t-il aussi' [DataContract] '? Qu'en est-il de '[BsonDocument]'? Généralement, vous devez définir des objets ** séparés **, légers (style DTO) pour les services WCF - n'héritez pas de choses comme une classe de base MongoDB - vous n'avez pas besoin ni ne voulez sérialiser tout cet état sur votre WCF un service.... –
En outre: WCF est un système de transfert de messages basé sur XML - donc tout ce que vous transmettez dans WCF doit être représentable dans le schéma XML (XSD); les interfaces ne sont pas ** supportées par XSD - vous devez utiliser des ** classes concrètes ** (et les génériques ne sont pas supportés non plus ...) –