在WCF中的类字段上添加验证

时间:2014-06-15 15:53:39

标签: c# wcf validation

我有一类客户。我想对它进行一些验证。 例如CustGuidId不是Guid.Empty,CustName不是NULL(必需)。

public class Customer
{
    public int CustId;
    public string CustName;
    public Guid CustGuid;
    public Guid[] OrderGuids;
}

我有这样的客户集合。所以我最终添加了这样的代码,这使它看起来很难看。

public class BatchError
{
    public int Index;
    public string ErrorCode;
    public string ErrorMessage;
}


public void GenerateValidationErrors(List<Customer> customers, out List<BatchError> batchErrors)
    {
        int rowNum = 0;
        batchErrors = new List<BatchError>(customers.Count);

        foreach (var customer in customers)
        {
            rowNum ++;
            Guid customerGuidParsed;
            if(!Guid.TryParse(customer.CustGuid.ToString(), out customerGuidParsed))
            {
                batchErrors.Add(new BatchError { Index = rowNum, ErrorCode = "CustomerGuidcannotBeNull", ErrorMessage = "Customer guid cannot be null." });
            }
            if (string.IsNullOrEmpty(customer.CustName))
            {
                batchErrors.Add(new BatchError { Index = rowNum, ErrorCode = "CustomerNamecannotBeEmpty", ErrorMessage = "Customer Name cannot be empty." });
            }
        }
    }

我们可以编写单独的验证器类,如GuidValidator,StringValidator。 并创建代表数组&amp;链接他们的调用?

(Customer c) => new GuidValidator(c.CustGuid.toString()),
(Customer c) => new StringValidator(c.CustName.toString())

但是哪种设计模式最适合这种情况?

还有其他方法可以在WCF中添加验证吗?

1 个答案:

答案 0 :(得分:0)

有很多方法可以进行验证。在采取任何行动之前,我更愿意验证DataContract。 它也可以在许多方面完成:

  • DatamemberAttribute有很多属性。其中之一是 IsRequired,它控制架构的minOccurs属性 元件。默认值为false。您可以像使用它一样使用它:

    [DataContract(Name ="Place", Namespace ="")] public class DataContractExample { [DataMember(IsRequired=true)] public string DataMemberExample; }

有关详细信息,请参阅MSDN上的DataMemberAttribute Class

  • 最简单的方法是验证属性,如:

    [DataContract] public class Customer { [DataMember] public string CustName { get { return this._custName; } set { if(string.IsNullOrEmpty(value)) throw new MyValidationException(); else this._custName=value; } } }

  • 另一种方法是使用 Microsoft Enterprise Library 。为了验证请求消息的属性,您只需要在[ValidationBehavior]的下一个(或之前)和[ServiceContract]向服务界面添加[FaultContract(typeof(ValidationFault))]属性关于方法声明。 ValidationBehaviorAttributeValidationFault类在Microsoft.Practices.EnterpriseLibrary.Validation.Integration.WCF程序集中定义,并且是企业库4.1的验证应用程序块的一部分,更具体地说,是WCF集成模块的验证应用程序块的一部分。有关详细信息,请参阅:http://weblogs.asp.net/ricardoperes/validation-of-wcf-requests-with-the-enterprise-library-validation-block

  • 最后,还有一个解决方案是使用来自http://wcfdataannotations.codeplex.com/的WCF数据注释。使用此功能,您可以使用以下验证:

    [DataMember]
    [Required]
    [StringLength(500, MinimumLength = 5)]
    public string Description{ get; set; }
    

选择满足您要求的产品。欢呼声。