Подтвердить что ты не робот

Добавление DataMember в существующий DataContract в WCF

Я хотел бы добавить DataMember к одному из моих DataContract s. Я хотел бы знать, как существующие серверы и клиенты будут вести себя в присутствии нового DataMember, если одна из сторон не будет обновлена.

Я помню, что есть способ сделать DataMember необязательным, но мне интересно, будет ли он работать во всех сценариях:

  • обновленный клиент = > старый сервер
  • старый клиент = > обновленный сервер
  • обновленный Client <= старый сервер
  • старый клиент <= обновленный сервер
4b9b3361

Ответ 1

WCF будет изящно обрабатывать новые члены, которых он не распознает. Потребитель контракта (на стороне клиента или на стороне сервера) просто не будет "видеть" этого участника, поэтому последним является то, что новый член никогда не должен быть свойством IsRequired=true.

Кроме того, WCF прозрачно соединяет новое свойство между компонентами, пока DataContract реализует IExtensibleDataObject. EG, если путь сообщения идет:

обновленный клиент = > старый сервер = > обновленный сервер

то обновленный сервер в конце цепочки по-прежнему будет видеть новый DataMember. Однако "старый сервер" не увидит новый DataMember.

Если старый сервер отправляет сообщение обновленному клиенту, новый дескриптор DataMember будет установлен на default(type) при десериализации в новом клиенте.

Подробнее о Рекомендации по сравнению с версиями DataContract здесь.

И в этой статье обсуждается разница между изменениями Breaking и Non-Breaking.