Аннотации данных по сервисным контрактам WCF
-
03-07-2019 - |
Вопрос
У меня есть служба 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 или я делаю что-то в корне неправильно?
Решение
Атрибуты не будут сериализованы, когда ваш контракт с данными будет отправлен по сети. Новый атрибут, созданный вами по существу в метаданных, который связан со свойством и, следовательно, с типом, которому принадлежит свойство. Это не данные и не будут доступны.
Я полагаю, что вы добавили ссылку на службу в свое приложение asp.net mvc, и это, если не указано, создаст новые прокси-классы, представляющие ваш контракт на данные. Р>
Когда вы добавляете ссылку на сервис, если вы нажимаете на расширенную кнопку, убедитесь, что установлен флажок «Использовать существующие типы». Это гарантирует, что ваш сервис будет использовать ваш существующий контракт. Р>
Это может не быть оптимальной практикой, поскольку клиентское приложение должно знать о типе, который вы возвращаете из службы. Это может быть нормально, если ваша служба используется только вами, и в этом случае вам нужно будет добавить ссылку на ваш контракт в приложении asp.net mvc.
Другие советы
Команда OData работает над решением, чтобы метаданные валидации были представлены в виде "словарей".
Дополнительная информация: http://www.odata.org/blog/vocabularies р>