我想将DataMember
添加到我的DataContract
之一。我想知道如果其中一方未更新,则在存在新的DataMember
的情况下现有的服务器和客户端将如何运行。
我记得有一种方法可以使DataMember
为可选,但是我想知道它是否在所有情况下都适用:
最佳答案
WCF将正常处理无法识别的新成员。契约(Contract)的使用者(无论是在客户端还是在服务器端)根本不会“看到”该成员,因此结果是,新成员永远不应是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。
关于.net - 在WCF中将DataMember添加到现有DataContract,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5624751/