2011-04-11 36 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

相关问题