2012-04-30 77 views
0

我正在嘗試確定是否將可選參數傳遞給我的WCF服務。例如,假設我有一個簡單的輸入對象,定義如下。確定是否在WCF Soap服務中傳遞可選參數

[DataContract] 
public class TestObject 
{ 
    [DataMember(IsRequired=false)] 
    public int OptionalIntegerField { get; set; } 
    [DataMember(IsRequired = false)] 
    public bool OptionalBooleanField { get; set; } 
    [DataMember(IsRequired = false)] 
    public string OptionalStringField { get; set; } 
} 

並定義爲

[OperationContract(Name = "TestMethod")] 
void TestMethod(TestObject obj); 

如果我有TestMethod的定義爲

public void TestMethod(TestObject obj) 
    { 
     Debug.WriteLine(obj.OptionalBooleanField); 
     Debug.WriteLine(obj.OptionalIntegerField); 
     Debug.WriteLine(obj.OptionalStringField); 
    } 

我的問題的服務合同的是,如果我做一個SOAP調用TestMethod的,沒有輸入參數指定,OptionalIntegerField和OptionalBooleanField(作爲值類型)被設置爲其默認值(0和false)。我需要確定是否傳遞了一個可選參數。

我的問題是什麼適當的方式來處理這個問題?我正在考慮使我的OptionalIntegerField和OptionalBooleanField爲可空類型,但我不確定這是否是正確的方法。

回答

2

假設您的引用類型也以相同的方式使用null的概念,其中null表示值不存在,可爲空的值類型是指示值類型成員的可能性的完全可接受的方式。

+0

我同意你的回答是這個特定問題的可接受答案。但是,設置可空類型是解決這個問題的唯一方法嗎?你知道任何其他解決方案嗎? – Learner

+1

您不必使用可爲空的類型,但如果您不需要,那麼您需要一些其他常見的缺少值。您可以使用默認值來表示它缺失,但不允許默認值爲有效值。或者,您可以將自定義序列化添加到您的合同對象,以將缺失值設置爲您選擇的默認「缺失」值。但問題是,你爲什麼想這樣做。如果有一個可以爲空的值類型不適用於你的情況的原因,我建議你就Stack Overflow問一個新的問題。 –