2009-05-04 6 views
6

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

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

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

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

ответ

7

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

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

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

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

+0

Так нижняя линия, есть ли способ, что я могу сделать IDE скопировать DataAnnotations атрибуты потребительских прокси-классов ?? Если да, то как? Я не нашел вариант «Использовать существующие типы», упомянутый в вашем сообщении (я использую VS10). – Shimmy

3

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

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

+0

Очень интересно. Надеемся, что мы сможем продолжать использовать стандартные (переносные) аннотации данных и атрибуты контрактов данных, а сантехника будет выполнена для нас каркасом. Слишком много атрибутов для одного и того же типа объявления объекта, например. сериализатор, XML-сериализатор, контракты данных, аннотации данных, структура сущностей ... !!! –