Domanda

Ho un servizio WCF che contiene una classe [DataContract]. Ciascuna delle proprietà ha l'attributo [DataMember] e ho aggiunto un paio di attributi di annotazione dei dati [Obbligatorio] e [StringLength] a un paio di proprietà.

Consumo quindi questo servizio in un'applicazione asp.net MVC come riferimento di servizio. Quando ottengo un elenco di tutti gli attributi usando

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

Vedo che nessuna delle annotazioni dei dati è arrivata. È una limitazione di WCF o sto facendo qualcosa di fondamentalmente sbagliato qui?

È stato utile?

Soluzione

Gli attributi non verranno serializzati quando il tuo contratto dati viene inviato via cavo. Il nuovo attributo creato nei metadati essenziali associati alla proprietà e quindi al Tipo a cui appartiene la proprietà. Questi non sono dati e non saranno disponibili.

Suppongo che tu abbia aggiunto un riferimento al servizio nella tua applicazione asp.net mvc, questo, se non specificato, creerà nuove classi proxy che rappresentano il tuo contratto di dati.

Quando aggiungi il riferimento al servizio, se fai clic sul pulsante avanzato assicurati che l'opzione "Usa tipi esistenti" sia selezionata. Questo garantisce che il tuo servizio utilizzerà il tuo contratto esistente.

Questa potrebbe non essere la migliore pratica perché l'applicazione client dovrà essere a conoscenza del Tipo che stai restituendo dal servizio. Questo può andare bene se il tuo servizio viene utilizzato solo da te, nel qual caso dovrai aggiungere un riferimento al tuo contratto nella tua applicazione asp.net mvc.

Altri suggerimenti

Il team di OData sta lavorando a una soluzione per esporre i metadati di convalida come "vocabolari".

Ulteriori informazioni: http://www.odata.org/blog/vocabularies

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top