我想在DataMember
之一添加DataContract
。我想知道如果其中一方未更新,现有服务器和客户端将在新DataMember
出现时表现如何。
我记得有一种方法可以使DataMember
成为可选项,但我想知道它是否适用于所有场景:
答案 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。