Question

J'ai un service WCF dans lequel une classe [DataContract] est définie. Chacune des propriétés possède l'attribut [DataMember] et j'ai ajouté quelques attributs d'attribution de données d'annotation [Obligatoire] et [StringLength] à quelques propriétés.

Je consomme ensuite ce service dans une application asp.net MVC en tant que référence de service. Quand je reçois une liste de tous les attributs en utilisant

var attr= from prop in TypeDescriptor.GetProperties(instance).Cast<PropertyDescriptor>()
                        from attribute in prop.Attributes.OfType<ValidationAttribute>()
                        select attribute;

Je ne vois aucune des annotations de données passées. Est-ce une limitation de la WCF ou est-ce que je fais quelque chose de fondamentalement faux ici?

Était-ce utile?

La solution

Les attributs ne seront pas sérialisés lorsque votre contrat de données sera envoyé sur le réseau. Le nouvel attribut que vous avez créé dans des métadonnées essentiellement associées à la propriété et, par conséquent, dans le type auquel la propriété appartient. Ce ne sont pas des données et ne seront pas disponibles.

Je suppose que vous avez ajouté une référence de service dans votre application asp.net mvc. Cela, sauf indication contraire, créera de nouvelles classes proxy représentant votre contrat de données.

Lorsque vous ajoutez la référence de service, si vous cliquez sur le bouton Avancé, assurez-vous que la case "Utiliser les types existants" est cochée. Cela garantit que votre service utilisera votre contrat existant.

Cela peut ne pas être une pratique recommandée car l'application cliente devra connaître le type que vous retournez du service. Cela peut vous convenir que votre service ne soit utilisé que par vous-même, auquel cas vous devrez ajouter une référence à votre contrat dans votre application asp.net mvc.

Autres conseils

L'équipe OData travaille sur une solution pour exposer les métadonnées de validation sous forme de "vocabulaires".

Plus d'informations: http://www.odata.org/blog/vocabularies

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top