2009-11-10 29 views
0

我想知道是否可以讓WCF確保連接兩端的DataContracts完全相同(並且在嘗試連接時拋出異常(如果它們不是) )。WCF:在兩邊強制執行相等的DataContracts

例如,想象一下這項服務:

[DataContract] 
enum State 
{ 
    [EnumMember] 
    Red, 
    [EnumMember] 
    Yellow, 
    [EnumMember] 
    Green 
} 

[ServiceContract] 
interface MyService 
{ 
    [OperationContract] 
    void SetState(State newState); 
} 

現在想象的服務更新,現在支持一個新的國家,「橙色」。客戶端仍然具有如上所示的DataContract。

現在我希望每個從客戶端到服務的呼叫都會失敗,因爲客戶端和服務不使用相同的DataContract。這可能嗎?

在此先感謝您的幫助!

+0

恐怕這是不可能的。 – 2009-11-10 10:22:48

+0

很遺憾。感謝您的回答。看起來我必須在這種情況下找到一些醜陋的解決方法來確保兼容性。 – Jan 2009-11-10 10:56:56

回答

2

那麼,你真的不能做所有的東西有關 - 但你能版採用XML命名空間數據的合同 - 是這樣的:

[DataContract(Namespace="http://data.yourcompany.com/DataSchema/2009/11")] 
enum State 
{ 
    [EnumMember] 
    Red, 
    [EnumMember] 
    Yellow, 
    [EnumMember] 
    Green 
} 

客戶現在將使用這些數據的合同 - 與XML名稱空間。

如果您在服務器上下個月更改數據的合同,你可以改變XML命名空間:

[DataContract(Namespace="http://data.yourcompany.com/DataSchema/2009/12")] 
enum State 
{ 
.... 
} 

如果你退休所使用的「/ 2009/11」的數據合同,只有所有的服務端點使用新的數據協定擁有新的端點時,客戶端將無法再成功調用您的服務方法(因爲兩個DataContracts的XML名稱空間不匹配)。

也許這將是一種方式?

Marc

+0

聽起來很不錯,謝謝! – Jan 2009-11-10 14:09:14