将DataMember添加到WCF中的现有DataContract

时间:2011-04-11 16:56:37

标签: .net wcf datacontract datamember isrequired

我想在DataMember之一添加DataContract。我想知道如果其中一方未更新,现有服务器和客户端将在新DataMember出现时表现如何。

我记得有一种方法可以使DataMember成为可选项,但我想知道它是否适用于所有场景:

  • 更新了Client =>旧服务器
  • old Client =>更新的服务器
  • 更新了客户端< =旧服务器
  • 旧客户端< =已更新服务器

1 个答案:

答案 0 :(得分:15)

WCF将优雅地处理它无法识别的新成员。合同的消费者(在客户端或服务器端)根本不会“看到”该成员,因此结果是新成员永远不应该是IsRequired=true属性。

此外,只要DataContract实现IExtensibleDataObject,WCF就会透明地桥接组件之间的新属性。 EG,如果消息路径为:

更新了客户端=>旧服务器=>更新的服务器

然后链末端的更新服务器仍会看到新的DataMember。但是,“旧服务器”将不会看到新的DataMember。

如果旧服务器向更新的客户端发送消息,则在新客户端中反序列化时,新的DataMember将设置为default(type)

还有更多关于Best Practices for DataContract versioning here

本文讨论the difference between Breaking and Non-Breaking changes