使用枚举的 WCF 前向兼容性

发布于 2025-01-03 08:48:46 字数 475 浏览 1 评论 0原文

我读过这篇关于版本之间枚举更改的帖子,但这对我没有帮助。 我有以下 wcf 服务:

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

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

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

I've read this post regarding enumaration changes between versions, but it didn't help me.
I have the following wcf service:

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

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

I'm looking for a way to add a new enum member, only to the service side. Let's say my client is using an old version of the proxy, without the new enum member I want to add.
My goal is avoiding a serialization exception, I want my client to be smart enough to handle this situation, ignoring the new value or anything. Any Ideas?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

平生欢 2025-01-10 08:48:46

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

将会崩溃的是将枚举值发送到枚举列表中没有该值的客户端。

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

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

这可能比其价值更多的工作,这取决于有多少客户端您已经拥有以及更新它们有多困难。

According to the answer in the question that you linked to, adding a new element to the enum does not break compatibility.

What will crash is sending an enum value to a client that does not have that value in the enum list.

To fix this by only changing the server side:

  • Add new value to enum
  • Create new service method that does the same as the old
  • New clients will use the new service
  • The old clients will use the old service
  • In the old service, before the result is sent, check if one of the new enum values are being used, if so change it to one of the old ones ("Uknown" if you have that value)

This may be more work than it is worth, it depends on how many clients you have and how difficult it is to update them.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文