Аннотации данных по сервисным контрактам WCF - PullRequest
6 голосов
/ 05 мая 2009

У меня есть служба WCF, в которой определен класс [DataContract]. Каждое из свойств имеет атрибут [DataMember], и я добавил пару атрибутов аннотации данных [Required] и [StringLength] к паре свойств.

Затем я использую эту услугу в приложении asp.net MVC в качестве справочной службы. Когда я получаю список всех атрибутов, используя

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

Я вижу, что ни одна из аннотаций данных не прошла. Это ограничение WCF или я делаю что-то в корне неправильно?

Ответы [ 2 ]

7 голосов
/ 05 мая 2009

Атрибуты не будут сериализованы, когда ваш контракт с данными будет отправлен по проводам. Новый атрибут, созданный вами по существу в метаданных, который связан со свойством и, следовательно, с типом, которому принадлежит свойство. Это не данные и не будут доступны.

Я полагаю, что вы добавили ссылку на службу в ваше приложение asp.net mvc, и это, если не указано, создаст новые прокси-классы, представляющие ваш контракт на данные.

Когда вы добавляете сервисную ссылку, если вы нажимаете на расширенную кнопку, убедитесь, что установлен флажок «Использовать существующие типы». Это гарантирует, что ваш сервис будет использовать ваш существующий контракт.

Возможно, это не лучшая практика, потому что клиентское приложение должно знать о типе, который вы возвращаете из службы. Это может быть хорошо, если ваша служба используется только вами, и в этом случае вам нужно будет добавить ссылку на ваш контракт в вашем приложении asp.net mvc.

3 голосов
/ 25 февраля 2011

Команда OData работает над решением, чтобы представить метаданные проверки как «словари».

Дополнительная информация: http://www.odata.org/blog/vocabularies

...