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