Можно ли поддерживать несколько разных версий одного и того же веб-сервиса с помощью клиента веб-сервиса .NET? - PullRequest
3 голосов
/ 27 ноября 2011

У меня есть случай, когда у меня есть клиент веб-службы как часть более крупного предложения.Роли здесь немного поменялись местами: клиенты - те, на которых размещаются веб-службы, а наше приложение - те, которые их потребляют.

В настоящее время все клиенты используют одну версию этих веб-служб (также изначально созданнуюнас).Благодаря этому новому предложению стек веб-сервисов, который мы предлагаем, будет расширен за счет новых функциональных возможностей;клиенты могут установить этот новый стек, если они хотят получить доступ к новым функциям.

Однако - ключевое требование - обратная совместимость.(Возможно, важно отметить, что у нас есть одна центральная установка нашего программного обеспечения, работающего на наших собственных серверах; все наши клиенты используют нашу систему через Интернет только с наших серверов . Системы клиентов, с другойhand, размещены ими индивидуально - и у них всех есть свои собственные установки продуктов, с которыми мы интегрируем (и устанавливаем наши веб-сервисы как дополнение) к этим продуктам).Таким образом, эта новая версия проекта в идеале должна определять, какую из двух версий стека веб-служб использует данный клиент (учитывая URL-адрес WSDL и любую другую соответствующую информацию), и использовать для связи соответствующий клиент веб-службы.,URL, в идеале, должен быть идентичным (то есть «www.exampleCompany22.com/MyCompanyWebService/» может работать под управлением версии 1, а «www.exampleCompany88.com/MyCompanyWebService/» может работать под управлением версии 2).Мы должны быть в состоянии определить, какую версию они используют, и использовать соответствующий код против нее.

Мы имеем контроль над нашей системой и над версией 2 (будущей, второй версией веб-служб), ноНЕ существующая версия 1 (которую клиенты уже установили, и у нее будет возможность не обновляться, если они выберут).

Есть ли какие-либо встроенные функции (или любая библиотека, или любой другой простой способ) дляреализовать это в .NET без каких-либо обходных путей?

Я не думаю, что это должно быть слишком сложным, но это, вероятно, не слишком распространенный случай ... И определенно не то, что я пришелчерез.

Я уже могу придумать несколько способов решения этой проблемы;но я хотел бы знать, существует ли реальный «правильный» способ сделать это (или если у кого-то был похожий случай раньше, и он может дать отзыв о том, как он это реализовал).

1 Ответ

1 голос
/ 27 ноября 2011

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

Одним из способов является то, что часть установки на стороне клиента - это вызов ваших серверов для уведомленияим какая версия у них в использовании.Перед тем как позвонить клиенту, вы должны проверить внутреннюю таблицу, чтобы определить номер версии, а затем предпринять соответствующие действия.

Второй способ - добавить номер версии в каждый файл службы, который вы устанавливаете всайт клиентов.Например: OurService20.asmx или OurService30.asmx.Наряду с этим у вас будет стандартный файл службы с именем GetVersion.asmx, в котором будет возвращена последняя установленная версия, которую вы можете использовать.

Другой способ - полностью выгрузить службы WSDL и ASMX и перейти на архитектуру RESTful, в которой вы сохраняететочно такая же схема именования, т.е.: OurService.ashx. Обратите внимание на разницу в расширениях .Используя этот метод, вы можете выполнить http GET, например http://remoteclient/OurService.ashx?getVersion, и проанализировать ответ.С этого момента вы будете точно знать, какую версию они установили.

Лично мне нравится маршрут RESTful, поскольку он дает вам гораздо больше гибкости, а также открывает ваше приложение для более легкого использования другими приложениями.

...