2009-05-04 20 views
6

Tengo un servicio WCF que tiene una clase [DataContract] definida en él. Cada una de las propiedades tiene el atributo [DataMember] y he agregado un par de atributos de anotación de datos [Obligatorio] y [StringLength] a un par de propiedades.Anotaciones de datos en contratos de servicio WCF

Luego consumo este servicio en una aplicación asp.net MVC como referencia de servicio. Cuando consigo una lista de todos los atributos usando

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

veo ninguna de las anotaciones de datos han llegado a través. ¿Es esto una limitación de WCF o estoy haciendo algo fundamentalmente malo aquí?

Respuesta

7

Los atributos no se serializarán cuando su contrato de datos se envíe a través del cable. El nuevo atributo que ha creado en los metadatos esencialmente asociados con la propiedad y, por lo tanto, el Tipo al que pertenece la propiedad. Esto no es información y no estará disponible.

Supongo que ha agregado una referencia de servicio en su aplicación asp.net mvc, esto, a menos que se especifique, creará nuevas clases proxy que representen su contrato de datos.

Cuando agrega la referencia de servicio, si hace clic en el botón avanzado, asegúrese de que la casilla 'Usar tipos existentes' esté marcada. Esto asegura que su servicio usará su conract existente.

Esto puede no ser la mejor práctica porque la aplicación del cliente deberá tener conocimiento sobre el Tipo que está devolviendo del servicio. Esto puede estar bien si solo usa su servicio usted mismo, en cuyo caso deberá agregar una referencia a su contrato en su aplicación asp.net mvc.

+0

Así inferior, ¿hay alguna manera de hacer que el IDE copiar los atributos DataAnnotations a los consumidores de proxy-clases ?? Si es así, ¿cómo? No encontré la opción 'Usar tipos existentes' mencionada en su publicación (utilizo VS10). – Shimmy

3

El equipo de OData está trabajando en una solución para exponer los metadatos de validación como "vocabularios".

Más información: línea de http://www.odata.org/blog/vocabularies

+0

Muy interesante. Es de esperar que podamos seguir utilizando las anotaciones de datos estándar (portátiles) y los atributos del contrato de datos, y el marco de trabajo se encargará de nosotros. Ya hay demasiados atributos para el mismo tipo de declaración de entidad, p. serializador, serializador XML, contratos de datos, anotaciones de datos, marco de entidad ... !!! –

Cuestiones relacionadas