题
我有一个WCF服务,其中定义了[DataContract]类。每个属性都有[DataMember]属性,我在几个属性中添加了几个Data Annotation属性[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的限制还是我在这里做了一些根本错误的事情?
解决方案
当您通过网络发送数据合同时,属性不会被序列化。您在与属性关联的esentially元数据中创建的新属性,以及属性所属的Type。这不是数据,也不可用。
我想您已经在asp.net mvc应用程序中添加了服务引用,除非另有说明,否则将创建代表您的数据协定的新代理类。
添加服务引用时,如果单击高级按钮,请确保选中“使用现有类型”。这可确保您的服务将使用您现有的conract。
这可能不是最佳做法,因为客户端应用程序必须了解您从服务返回的类型。如果您的服务仅由您自己使用,则可能没问题,在这种情况下,您需要在asp.net mvc应用程序中添加对合同的引用。
其他提示
OData团队正在开发一个解决方案,将验证元数据公开为“词汇表”。
不隶属于 StackOverflow