我建议不要通过 WCF 接口发送枚举。假设你有以下枚举:
[DataContract]
public enum WeekdayEnum
{
[EnumMember]
Monday = 0
}
如果您通过 WCF 返回枚举,一切都会正常运行:
[ServiceContract]
public class Service1
{
[OperationContract]
public List<WeekdayEnum> GetWeekdays()
{
return new List<WeekdayEnum> { WeekdayEnum.Monday };
}
}
添加到枚举而不更新客户端中的服务引用,你仍然可以:
[DataContract]
public enum WeekdayEnum
{
[EnumMember]
Monday = 0,
[EnumMember]
Tuesday = 1
}
但是,如果您从服务返回附加值而不更新客户端服务引用,旧客户端将中断:
[ServiceContract]
public class Service1
{
[OperationContract]
public List<WeekdayEnum> GetWeekdays()
{ // NetDispatcherFaultException on legacy clients that only have Monday
return new List<WeekdayEnum> { WeekdayEnum.Monday, WeekdayEnum.Tuesday };
}
}
在支持遗留客户很重要的项目中,我遇到了这个问题。解决方案是简单地通过 WCF 而不是枚举发送 DTO。例如。可以通过简单的 DTO 发送值来替换 WeekdayEnum:
[DataContract]
public class WeekdayDto
{
[DataMember]
public int Id { get; set; }
[DataMember]
public string Name { get; set; }
}
这样,您的老客户会很开心。