我想将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/

  • 10-11 16:33