2011-04-11 63 views
12

我想將DataMember添加到我的DataContract之一中。如果其中一方沒有更新,我想知道現有服務器和客戶端在存在新的DataMember時會如何行事。將數據成員添加到WCF中的現有DataContract中

我記得有一種方法可以使DataMember可選的,但我不知道它會在所有情況下工作:

  • 更新的客戶端=>舊服務器
  • 老客戶=>更新服務器
  • 更新的客戶端< =舊服務器
  • 老客戶< =更新服務器

回答

15

WCF將優雅地處理它無法識別的新成員。合同的消費者(無論是在客戶端還是服務器端)都不會「看到」該成員,因此結果是新成員不應該是IsRequired=true財產。

此外,只要DataContract實現了IExtensibleDataObject,WCF就會透明地橋接組件之間的新屬性。 EG,如果消息路徑雲:

更新的客戶端=>舊的服務器=>更新服務器

然後在鏈末端的更新服務器仍然看到新的數據成員。但是,「舊服務器」不會看到新的DataMember。

如果舊服務器向更新的客戶端發送消息,則在新客戶端進行反序列化後,新的DataMember將被設置爲default(type)

還有更多關於Best Practices for DataContract versioning here。本文討論the difference between Breaking and Non-Breaking changes

+0

從你提供的最後一個鏈接:'在大多數情況下,添加或刪除數據成員不是一個突破性變化' – 2011-04-11 17:16:19

相關問題