Аннотации данных по сервисным контрактам WCF

StackOverflow https://stackoverflow.com/questions/822328

  •  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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top