【问题标题】:is changing underlying type of an enum breaking change for wcf contract?正在更改 wcf 合同的枚举破坏性更改的基础类型?
【发布时间】:2012-08-13 16:26:13
【问题描述】:

假设我有一个像这样的简单 wcf 服务

[DataContract]
public enum VMType : int
{
    [EnumMember]
    Unknown = 0,

    [EnumMember]
    Virtual = 1,

    [EnumMember]
    Physical = 2,
}

[DataContract]
public class ClientRequest
{
    [DataMember]
    public string Code { get; set; }

    [DataMember]
    public VMType VMType { get; set; }
}

[ServiceContract]
public interface IService
{
    [OperationContract]
    int GetStatus(ClientRequest request);
}

如果将枚举 VMType 更改为

public enum VMType : byte
{

这是否被认为是一个重大变化?旧的 WCF 客户端是否仍能连接到新的服务主机?

根据Enumeration Types in Data Contracts

通常数据协定包括枚举成员名称,而不是数值

【问题讨论】:

    标签: c# .net wcf


    【解决方案1】:

    这是否被认为是一个重大变化?

    是的。这将改变序列化,这将是一个重大的改变。

    旧的 WCF 客户端是否仍能连接到新的服务主机?

    这在很大程度上取决于连接的类型 - 特别是用于映射数据的序列化程序。根据所使用的binding,这可能有效,也可能无效。

    【讨论】:

    • 您是否对 更改序列化 有任何引用,根据 MSDN,枚举数据类型通常使用 枚举成员名称,而不是数值
    • @parapurarajkumar 这完全取决于所使用的数据合约。正常情况下,enum 会被序列化为字符串,但也有例外,比如 JSON 序列化器 (msdn.microsoft.com/en-us/library/bb412170.aspx)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-29
    • 1970-01-01
    • 2020-10-28
    • 2016-11-30
    相关资源
    最近更新 更多