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