wcf - WCF 服务契约(Contract)上的数据注释

标签 wcf data-annotations

我有一个 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 的限制还是我在这里做错了什么?

最佳答案

当您的数据契约(Contract)通过网络发送时,属性不会被序列化。您在与属性相关联的元数据中创建的新属性,因此是属性所属的类型。这不是数据,将不可用。

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

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

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

关于wcf - WCF 服务契约(Contract)上的数据注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/822328/

相关文章:

WCF - 添加到 [DataMember] List<BaseClass> 的子类导致异常

.net - WCF 可以托管在 Windows Nano Server 2016 上吗?

c# - 如何对另一个程序集中的对象进行数据注释?

c# - MVC 5 自定义验证在下一个选项卡之前验证

c# - Required 属性对导航属性有什么影响吗?

wcf - 模拟 PostSharp 属性的最简单方法

asp.net - 我们可以在同一个服务(ServiceContract)中为不同的方法(OperationContract)使用 DataContractSerializer 和 XMLFormatSerializer 吗?

c# - WCF 和 <identity impersonate ="true"/>

c# - 可以对值类型强制执行 [Required]

c# - 模型中属性的正则表达式验证