WCF DTO версии - PullRequest
       11

WCF DTO версии

1 голос
/ 24 мая 2010

В настоящее время у меня есть несколько служб, которые возвращают dto со следующими полями:

[DataMember]
public int Id { get; set; }
[DataMember]
public string Name { get; set; }

и я хочу добавить больше к этому сервису, добавив следующие свойства:

[DataMember]
public virtual DateTime StartDate { get; set; }

Я не в состоянии, хотя я могу обновить потребителей этих услуг - клиент делает это самостоятельно.

Мой вопрос: смогут ли старые клиенты просто пропустить эти новые свойства? и новые используют их или сериализация станет проблемой с новыми свойствами?

ш: //

Ответы [ 3 ]

0 голосов
/ 24 мая 2010

Из того, что я видел, DataContractSerializer просто устанавливает нулевое значение для свойств, не найденных при десериализации. Делает обнаружение некоторых ошибок довольно хитрым - иногда я бы предпочел, чтобы он был более строгим и давал исключение.

Другой вариант, который следует рассмотреть, - это создание подкласса исходного DTO для создания нового производного класса.

Для правильной работы сериализации необходимо указать доступные производные классы для супертипа с атрибутом:

[DataContract]
[KnownType(typeof(DerivedDTO))]
public class OriginalDTO

В коде, где вы используете дополнительное свойство, вам нужно будет привести объект к DerivedDTO, чтобы получить доступ к свойству (для этого я использую ключевое слово as и проверяю, является ли полученная ссылка нулевой, прежде чем использовать его) *

0 голосов
/ 24 мая 2010

Пока новый элемент StartDate не объявлен обязательным полем - так что не будет работать:

[DataMember(IsRequired="True")]
public virtual DateTime StartDate { get; set; }

Но до тех пор, пока вы пропустите IsRequired=True, с вами все будет в порядке.

0 голосов
/ 24 мая 2010

Пока старые свойства не меняются (а новые помечаются как необязательные), вы должны быть в порядке.

Сказано, что вы должны опубликовать новый контракт и попросить клиентов сгенерировать ссылку на службу или развернуть новую версию на другой конечной точке, чтобы, когда они будут готовы к переключению, они были вынуждены указывать на новый.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...