2015-11-07 60 views
1

我有一個wcf服務,客戶端將通過自定義生成的代理服務器來使用此WCF服務,該代理服務器將提供給客戶端。可選的整數參數默認爲零,雖然它被指定爲-1

[OperationContract] 
string GetData(int value); 

所以,現在我已經添加了一個新的類型爲int的可選參數給我的一個WCF合約,它應該默認爲-1。我沒有給你任何更新代理到客戶端,現在如果客戶要求的新的可選參數被賦值爲0,而不是-1

[OperationContract] 
    string GetData(int value, int pre = -1); 

爲什麼它沒有得到,這是默認值合同分配給它是-1。預計會如此工作嗎?

enter image description here

+0

嘗試創造超載沒有第二個參數調用原始方法傳遞-1 –

+0

它說沒有重載的方法需要兩個參數,儘管在intellisense它顯示兩個重載 –

回答

1

我沒有給你任何更新代理到客戶端

是的,這是預期。當您在不更新客戶端的情況下添加參數時,WCF將使用該類型的默認值自動填充客戶端調用中缺少的值。它不知道在你的類中聲明的默認值。

首選使用接口而不是類聲明WCF合約的一個原因是接口更符合WCF支持的內容。您甚至無法在接口中爲參數聲明該方法的默認值。 :)

另一種方法是在默認參數出現之前按照我們以前在常規C#代碼中執行的方式實現默認值:通過爲方法實現重載。即呼叫站點將調用實際上不使用該參數的方法。在這種情況下,被調用者確定默認值。 (這種方法在常規C#代碼中仍然很有用,對此,您希望能夠在不更改調用者的情況下更改參數的默認值)。

1

默認參數是不是在WCF接口的支持。