Tout type complexe (à savoir plus d'une int
ou string
) qui est utilisé par l'une des opérations de service (méthodes marquées [OperationContract]
) doit être un [DataContract]
.
Les opérations/méthodes de service sont en cours de traduction en actions SOAP dans votre fichier WSDL (Web Service Description Language). Toute donnée transmise doit être quelque chose qui peut être exprimé dans un schéma XML (fichier XSD). Pour int, string, etc., il existe des types XSD prédéfinis de base, mais tout ce qui est au-delà - un type Customer
ou tout autre type - doit être défini d'une manière qui peut être transformée en un schéma XSD. Rappelez-vous: après tout, les services WCF sont conçus pour être interopérables avec d'autres systèmes comme Java, PHP et tout ce que vous pourriez imaginer. Donc tout ce qui se trouve dans les contrats de service - toutes les opérations et toutes les données exploitées - doit être dans un format qui peut être exprimé dans un fichier WSDL (opérations) et XSD (données) qui sont des normes industrielles largement acceptées. Pour l'instant, WCF dans .NET 3.5 est très explicite - vous devez définir des classes et les marquer avec l'attribut [DataContract]
, et tous les champs ou propriétés dans les classes que vous souhaitez exposer aux fichiers WSDL/XSD (et donc à votre définition de service) doit être explicitement marqué avec un attribut [DataMember]
.
Est-ce que cela rend les choses un peu plus claires?
MArc
Parlez-vous de la DataContract lui-même ou DataContractSerializer qui gère la sérialisation du DataContract? –