我想在我的一个DataContract
中添加一个DataMember
。 我想知道,如果参与通信的一方没有更新,那么现有的服务器和客户端将如何处理新的DataMember
。
我记得有一种方法可以使DataMember
成为可选项,但我不确定它是否适用于所有场景:
- 已更新的客户端=>旧服务器
- 旧客户端=>更新的服务器
- 已更新的客户端 <= 旧服务器
- 旧客户端 <= 更新的服务器
我想在我的一个DataContract
中添加一个DataMember
。 我想知道,如果参与通信的一方没有更新,那么现有的服务器和客户端将如何处理新的DataMember
。
我记得有一种方法可以使DataMember
成为可选项,但我不确定它是否适用于所有场景:
WCF会优雅地处理它不能识别的新成员。契约的消费者(在客户端或服务器端)将简单地“看不到”该成员,因此一个结果是新成员永远不应该是 IsRequired=true
属性。
此外,只要DataContract实现了 IExtensibleDataObject
,WCF就会透明地在组件之间桥接新属性。例如,如果消息路径为:
更新后的客户端 => 旧服务器 => 更新后的服务器
那么链末端的更新后的服务器仍然会看到新的DataMember。但是,“旧服务器”将看不到该新的DataMember。
如果旧服务器向更新后的客户端发送消息,则新的DataMember在新客户端中反序列化时将被设置为 default(type)
。
有关DataContract版本控制的最佳实践,请参见此处。
本文讨论了 Breaking和Non-Breaking更改之间的区别。