6

我有一个 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 的限制还是我在这里做一些根本错误的事情?

4

2 回答 2

7

当您的数据合同通过网络发送时,这些属性不会被序列化。您在本质上与属性关联的元数据中创建的新属性以及属性所属的类型。这不是数据,将不可用。

我猜您已经在您的 asp.net mvc 应用程序中添加了一个服务引用,除非指定,否则它将创建代表您的数据合同的新代理类。

添加服务引用时,如果单击高级按钮,请确保选中“使用现有类型”。这确保您的服务将使用您现有的合同。

这可能不是最佳实践,因为客户端应用程序必须了解您从服务返回的类型。如果您的服务仅供您自己使用,这可能没问题,在这种情况下,您需要在您的 asp.net mvc 应用程序中添加对您的合同的引用。

于 2009-05-04T22:33:02.237 回答
3

OData 团队正在研究一种将验证元数据公开为“词汇表”的解决方案。

更多信息:http ://www.odata.org/blog/vocabularies

于 2011-02-24T23:18:08.533 回答