Отметить устаревшие поля в контракте WCF

У меня есть контракт wcf, который работает с клиентом v1.

Сейчас я работаю над сервисом v2 и хочу пометить некоторые поля как устаревшие, поэтому клиент v1 увидит и будет их использовать, а клиент v2 их проигнорирует.

Существуют ли какие-либо передовые методы решения этой проблемы? Существуют ли какие-либо существующие атрибуты в WCF, которые я должен использовать?

благодаря.


person Adibe7    schedule 23.03.2011    source источник


Ответы (3)


Вы можете оформить свои старые свойства как [Obsolete], но клиент увидит их только в том случае, если они используют ссылку на DLL, а не на службу/веб-ссылку (WSDL). [Obsolete] оформление не будет передано клиенту, использующему WSDL для создания прокси.

С точки зрения управления версиями WCF, после того как вы опубликовали интерфейс, вы не можете удалить какие-либо методы или с точки зрения контракта, вы действительно не должны удалять какие-либо свойства. Вы можете опубликовать новый интерфейс и создать отдельный класс DTO, если хотите, чтобы их использовали новые клиенты.

Ссылка: Устаревший атрибут.

person Aliostad    schedule 23.03.2011
comment
[Устаревшее] — это пользовательское свойство, которое вы создали, верно? - person Adibe7; 23.03.2011
comment
Извините, я имел в виду [Obsoltete]. Исправил. - person Aliostad; 23.03.2011
comment
[устарело] не оставит мне возможности поддерживать v1 - person Adibe7; 23.03.2011

На нашей стороне мы обычно версионируем операцию через пространство имен. Когда операция устарела, мы просто помещаем комментарий об устаревании в описание, которое клиент может увидеть через wsdl. Мы уведомляем наших клиентов и сообщаем им об устаревших операциях и о том, когда истечет срок их действия.

person odez213    schedule 23.03.2011

Я согласен с @Aliostad в том, что вам не следует удалять операции из контракта на обслуживание в целом, поскольку это вносит критические изменения, и поэтому их следует избегать в одной версии API.

Однако, если вы хотите проинформировать клиента/потребителя о некоторых запланированных изменениях или у вас есть другие потребности добавить определенную «дополнительную» информацию в операционный контракт, вы можете взглянуть на IWsdlExportExtension, создайте настраиваемый атрибут, который его реализует, и аннотируйте определенные операции.

Вы можете взглянуть на это статью для подробного ознакомления.

person Jozef Benikovský    schedule 30.01.2017