2009-05-04 15 views
6

J'ai un service WCF auquel une classe [DataContract] est définie. Chacune des propriétés possède l'attribut [DataMember] et j'ai ajouté quelques attributs d'annotation de données [Required] et [StringLength] à quelques propriétés. Je consomme ensuite ce service dans une application MVC asp.net en tant que référence de service. Lorsque j'obtiens une liste de tous les attributs en utilisantAnnotations de données sur les contrats de service WCF

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 ont traversé. Est-ce une limitation de WCF ou est-ce que je fais quelque chose de fondamentalement faux ici?

Répondre

7

Les attributs ne seront pas sérialisés lors de l'envoi de vos données sur le réseau. Nouvel attribut que vous avez créé dans les méta-données associées à la propriété et donc au type dans lequel 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 créera, sauf indication contraire, de nouvelles classes proxy représentant votre contrat de données. Lorsque vous ajoutez la référence du 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 bonne pratique car l'application cliente devra avoir des connaissances sur le type que vous renvoyez du service. Cela peut être correct si votre service n'est utilisé que par vous-même, auquel cas vous devrez ajouter une référence à votre contrat dans votre application asp.net mvc.

+0

ligne Donc fond, est-il possible que je puisse faire l'IDE copier les attributs DataAnnotations aux proxy classes de consommation ?? Si oui, comment? Je n'ai pas trouvé l'option 'Utiliser les types existants' mentionnée dans votre message (j'utilise VS10). – Shimmy

3

L'équipe OData travaille sur une solution permettant d'exposer les métadonnées de validation en tant que «vocabulaires».

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

+0

Très intéressant. Nous espérons pouvoir continuer à utiliser les annotations de données standard (portables) et les attributs de contrat de données et la plomberie sera faite pour nous par le cadre. Il y a déjà trop d'attributs pour le même type de déclaration d'entité, par ex. sérialiseur, sérialiseur XML, contrats de données, annotations de données, framework d'entité ... !!! –