Pregunta

Tengo un servicio WCF que tiene una clase [DataContract] definida. Cada una de las propiedades tiene el atributo [DataMember] y he agregado un par de atributos de Anotación de datos [Required] y [StringLength] a un par de propiedades.

Luego, consumo este servicio en una aplicación MVC de asp.net como referencia de servicio. Cuando obtengo 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 que ninguna de las anotaciones de datos ha llegado. ¿Es esto una limitación de WCF o estoy haciendo algo fundamentalmente incorrecto aquí?

¿Fue útil?

Solución

Los atributos no se serializarán cuando su contrato de datos se envíe por cable. El nuevo atributo que ha creado en los metadatos esenciales que está asociado 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 mvc de asp.net, esto, a menos que se especifique, creará nuevas clases de proxy que representan 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 utilizará su contrato existente.

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

Otros consejos

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

Más información: http://www.odata.org/blog/vocabularies

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top