Принудительное ограничение на DataContracts - PullRequest
4 голосов
/ 12 октября 2011

Можно ли каким-либо образом применять ограничения на значения, передаваемые в форме контрактов данных в качестве параметров для данной службы WCF?

Например, рассмотрите, пожалуйста, надуманное и, безусловно, некомпилируемое пример этого Vehicle класса:

[DataContract]
public class Vehicle
{
    [DataMember]
    [Restriction(MinValue = 1, MaxValue = 30)] // Certainly not allowed... or is it?
    public int NumberOfWheels { get; set; }
}

Поскольку, конечно, никто не ожидает найти автомобиль с более чем, скажем, 30 колесами, я хотел бы ограничить диапазон NumberOfWheels до значения между 1 и 30. Можно ли каким-либо образом использовать ограничения / фасеты XSD для ограничения диапазона допустимых значений в этом случае?

(Обратите внимание, что я, конечно, мог бы изменить типот NumberOfWheels от int до, скажем, byte для дальнейшего ограничения диапазона возможных значений. Однако это не решило бы проблему ... Конечно, никто не ожидает, что автомобиль будет иметь 255 колес.)

1 Ответ

3 голосов
/ 12 октября 2011

Вот пример использования dataannotations:

using System.ComponentModel.DataAnnotations;

[DataContract]
public class Test
{
    [DataMember]
    [Range(1, 30)]
    public int MyProperty { get; set; }
}

public void DoWork(Test t)
{            
    // this will throw validation exceptions, overloads are available to trap and handle
    Validator.ValidateObject(t, new ValidationContext(t), true);
    //do stuff here
}

Снова следует отметить, что поведение не может быть отправлено / принудительно клиенту с использованием этого метода. Это только подтвердит, что объект выполняет, как описано валидация.

...