wcf使用枚举的向前兼容性

时间:2012-02-05 08:04:56

标签: wcf enums versioning compatibility

关于版本之间的更改,我已经阅读了这个post,但它对我没有帮助。 我有以下wcf服务:

[ServiceContract]
public interface IService1
{
    [OperationContract]
    MyEnum Foo();
}

[DataContract]
public enum MyEnum
{
    [EnumMember]
    first,
    [EnumMember]
    Second,
}

我正在寻找一种方法来添加新的枚举成员,仅限于服务端。假设我的客户端使用的是旧版本的代理,没有我要添加的新枚举成员。 我的目标是避免序列化异常,我希望我的客户端足够聪明来处理这种情况,忽略新值或任何东西。有任何想法吗?

1 个答案:

答案 0 :(得分:2)

根据您链接的问题中的答案,向枚举添加新元素不会破坏兼容性。

将崩溃的内容发送给枚举列表中没有该值的客户端。

要通过仅更改服务器端来解决此问题:

  • 为枚举添加新值
  • 创建与旧
  • 相同的新服务方法
  • 新客户将使用新服务
  • 旧客户将使用旧服务
  • 在旧服务中,在发送结果之前,检查是否正在使用其中一个新的枚举值,如果是,则将其更改为旧的一个(如果您有该值,则为“Uknown”)

这可能比它的价值更多,这取决于你拥有多少客户以及更新它们的难度。