Я бы рекомендовал , а не , отправляя перечисления через интерфейсы 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 };
}
}
У меня были проблемы с этим в проектах, где важна поддержка старых клиентов.Решением было просто отправить DTO через WCF вместо перечислений.Например, WeekdayEnum можно заменить, отправив значения через простой DTO:
[DataContract]
public class WeekdayDto
{
[DataMember]
public int Id { get; set; }
[DataMember]
public string Name { get; set; }
}
Таким образом, ваши старые клиенты останутся довольны.