2011-10-11 16 views
4

有什麼辦法可以強制限制以數據合同的形式傳遞的值作爲給定WCF服務的參數嗎?對DataContracts執行Restritions

例如,請考慮此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個車輪)

+0

除了在服務層中顯示域驗證外,您還可以使用dataannotation驗證器嗎?即[範圍(1,30)]。它們位於System.ComponentModel.DataAnnotations庫中。 –

+0

作爲附錄,應該注意的是隻有類型定義會發送給客戶端,所以雖然我們可以在客戶端收到數據後進行驗證,但我們不能強制客戶端的行爲。 –

回答

3

下面是使用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 
} 

同樣應當注意的是行爲不能被髮送/被迫使用該方法的客戶機。它只會驗證對象符合所描述的驗證。