Ответ 1
WCF будет изящно обрабатывать новые члены, которых он не распознает. Потребитель контракта (на стороне клиента или на стороне сервера) просто не будет "видеть" этого участника, поэтому последним является то, что новый член никогда не должен быть свойством IsRequired=true
.
Кроме того, WCF прозрачно соединяет новое свойство между компонентами, пока DataContract реализует IExtensibleDataObject
. EG, если путь сообщения идет:
обновленный клиент = > старый сервер = > обновленный сервер
то обновленный сервер в конце цепочки по-прежнему будет видеть новый DataMember. Однако "старый сервер" не увидит новый DataMember.
Если старый сервер отправляет сообщение обновленному клиенту, новый дескриптор DataMember будет установлен на default(type)
при десериализации в новом клиенте.
Подробнее о Рекомендации по сравнению с версиями DataContract здесь.
И в этой статье обсуждается разница между изменениями Breaking и Non-Breaking.