Создание обратно-совместимых служб WCF

TL; DR: Как мне создать службы WCF с обратной совместимостью - то есть, когда Я развертываю новую версию службы на стороне сервера, все клиенты более старых версий могут по-прежнему использовать службу.


Я создаю веб-службу, которая позволит клиентским приложениям получать список подключаемых модулей. У меня будет по крайней мере одна операция вроде FindPlugins (string nameOrDescription) , которая на сервере выполнит поиск и вернет список объектов.

К сожалению, я не могу гарантировать, что все мои клиенты будут обновляться с каждой новой версией моей службы; нет, я уверен , что многие из них будут иметь последнюю версию и будут иметь старые версии - сколько лет, я не уверен, но я знаю, что они будут старыми :)

Если Я создаю новую операцию службы, изменяю схему или выполняю какую-то операцию прерывания на стороне сервера, все готово. Мне всегда нужно разрабатывать обратную совместимость.

Вот один пример. Скажем, я возвращаю список подключаемых модулей , каждый из которых имеет имя и описание, и развертываю версию 0.1 своей службы. Затем я добавляю ссылку для загрузки и развертываю ее как v0.2 моего сервиса.


Вот некоторые варианты, которые я вижу:

  • Заставить клиентов обновлять службу до последней версии (невозможно)
  • Прекращать работу службы для старых клиентов (невозможно)
  • Добавлять номер версии к каждой операции и только использовать операции, зависящие от версии (например, FindPluginsV1 , FindPluginsV2 ) - не представляется практичным с несколькими операциями
  • Предоставлять новую услугу с каждой новой версией - не кажется практичным
9
задан ashes999 11 January 2012 в 20:17
поделиться