Dot-Net

將 DataMember 添加到 WCF 中的現有 DataContract

  • April 11, 2011

我想DataMember在我的一個DataContracts 中添加一個。我想知道DataMember如果其中一方未更新,現有伺服器和客戶端在新的存在下將如何表現。

我記得有一種方法可以DataMember選擇,但我想知道它是否適用於所有場景:

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

WCF 將優雅地處理它無法辨識的新成員。合約的消費者(在客戶端或伺服器端)根本不會“看到”該成員,因此結果是新成員永遠不應該是一個IsRequired=true 屬性。

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

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

那麼鏈末端的更新伺服器仍然會看到新的 DataMember。但是,“舊伺服器”不會看到新的 DataMember。

如果舊伺服器向更新的客戶端發送消息,則新的 DataMember 將default(type)在新客戶端的反序列化時設置為。

這裡有更多關於DataContract 版本控制的最佳實踐

這篇文章討論了 Breaking 和 Non-Breaking changes 之間的區別

引用自:https://stackoverflow.com/questions/5624751