прямая совместимость wcf с использованием перечислений - PullRequest
0 голосов
/ 05 февраля 2012

Я прочитал пост об изменениях перечисления между версиями, но это мне не помогло.У меня есть следующая служба wcf:

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

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

Я ищу способ добавить нового члена enum, только на стороне службы .Допустим, мой клиент использует старую версию прокси, без нового члена enum, который я хочу добавить.Моя цель - избежать исключения сериализации, я хочу, чтобы мой клиент был достаточно умен, чтобы справиться с этой ситуацией, игнорируя новое значение или что-то еще.Есть идеи?

1 Ответ

2 голосов
/ 05 февраля 2012

Согласно ответу в ответе на вопрос, на который вы ссылались, добавление нового элемента в enum не нарушает совместимость.

Сбой при отправке значения enum клиенту, у которого нет этого значенияв списке enum.

Чтобы исправить это, изменив только сторону сервера:

  • Добавьте новое значение в enum
  • Создайте новый метод обслуживания, который работает так же, какстарые
  • Новые клиенты будут использовать новый сервис
  • Старые клиенты будут использовать старый сервис
  • В старом сервисе, перед отправкой результата, проверьте, неновые значения перечисления используются, если это так, измените его на одно из старых («Uknown», если у вас есть это значение)

Это может быть больше работы, чем стоит, это зависит отсколько у вас клиентов и насколько сложно их обновить.

...