Pergunta

Eu tenho um serviço WCF que tem uma [DataContract] classe definida nele. Cada uma das propriedades tem o atributo [DataMember] e eu adicionei um par de dados de anotação atributos [Required] e [StringLength] para um par das propriedades.

Eu, então, consumir este serviço em um aplicativo MVC asp.net como uma referência de serviço. Quando eu chegar em uma lista de todos os atributos usando

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

Eu vejo nenhuma das anotações de dados têm passarem. É este uma limitação do WCF ou estou fazendo algo fundamentalmente errado aqui?

Foi útil?

Solução

Os atributos não vai ser serializado quando o seu contrato de dados é enviada ao longo do fio. O novo atributo que você criou em dados esentially meta que está associado com a propriedade e consequentemente exige o tipo em que a propriedade pertence. Isto não é de dados e não estará disponível.

Eu acho que você adicionou uma referência de serviço em seu aplicativo mvc asp.net, esta vontade, a menos que especificado, criar novas classes de proxy que representam o seu contrato de dados.

Quando você adiciona a referência de serviço, se você clicar no botão avançado Verifique se o 'Use tipos existentes' está marcada. Este garantir que seu serviço vai usar o seu conract existente.

Esta pode não ser a melhor prática porque o aplicativo cliente terá que ter conhecimento sobre o tipo que você está voltando do serviço. Isso pode ser bom se o serviço é utilizado apenas por si mesmo nesse caso, você precisará adicionar uma referência para você contrato em seu aplicativo mvc asp.net.

Outras dicas

A equipe de OData está trabalhando em uma solução para expor os metadados de validação como "vocabulários".

Mais informações: http://www.odata.org/blog/vocabularies

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top