2009-05-22 202 views
2

我有一個方法公開爲我的WCF服務的OperationContract,我想返工。以前的程序員寫了類似:WCF擴展方法的命名約定

public ReportResultObject GetReport(string stringContainingParameters) 

我想有一個方法,那就是更多的東西是這樣的:

public ReportResultObject GetReport(int[] someIds, bool includeAdditionalInformation) 

由於WCF犯規允許重載方法沒有在指定名稱屬性OperationContract,我不想打破目前的客戶,是否有這樣的情況命名約定?像GetReportV2或GetReportHeyUseMeInstead?

+0

合同中的名稱屬性有什麼問題? – 2009-05-22 13:45:16

+0

沒有什麼是真的,除了我希望程序員有一種方法,無論他們是脫離WSDL還是僅僅使用ChannelFactory方法,以便能夠區別僅在較老的客戶端中使用的方法,以及應該是用於新客戶。 – 2009-05-22 13:56:42

回答

1

我會選擇一些有意義的東西,使人們更容易識別並恰當地使用它。

public ReportResultObject GetReportWithAdditionalInformation(...) 

雖然可能有點太多!

我肯定會避免GetReportV2或類似的。

0

如果你的WCF服務是RESTful的,如果bool includeAdditionalInformation被傳遞或沒有通過,那麼它有關係嗎?

6

通過再次做同樣的事情,當你需要添加另一個參數時,你只需要爲自己設置相同的「混亂」。我強烈建議你看看有一個參數是數據合同;

public ReportResultObject GetReportTheSuperDooperWay(
    GetReportParameters parameters) 

這會給你什麼?那麼

[DataContract] 
public class GetReportParameters 
{ 
[DataMember(IsRequired=false)] 
public string parameters; 

[DataMember(IsRequired=false)] 
public int[] someIds; 

[DataMember(IsRequired=false)] 
bool includeAdditionalInformation 
} 

因此,因爲每個字段是可選的,你可以添加新的字段,而不會破壞現有的客戶端。這是一個相當簡單的例子,因爲您也需要實施IExtensibleDataObject,您應該通過servicedata合同級別的命名空間進行版本控制。

1

創建一個新的操作合同併爲其添加一個命名空間。然後讓你的客戶使用新的合同,通過命名空間來調用它。這將模擬版本控制。