Добавление методов в веб-сервис: нужно ли старым клиентам обновлять веб-ссылки?
ProductA использует наш единственный веб-сервис, который является отдельным развертыванием от ProductA. Мы развернем оба к производству.
Позже мы пишем ProductB. В ходе этой работы мы добавляем новый метод в наш единственный веб-сервис. Этого нового метода не было в WSDL, когда поставляется ProductA. Мы не вносим никаких изменений в ProductA в процессе разработки.
Когда мы внедряем ProductB в производство, мы также внедряем (в производство) новую версию нашего единственного веб-сервиса (по тому же URL-адресу конечной точки, где ProductA ожидает его найти). Мы не перераспределяем ProductA в производство.
WSDL для нашего единственного веб-сервиса изменился в рабочей среде, но сигнатуры методов, используемых ProductA, не изменились. Они все еще в WSDL.
Будут ли у ProductA какие-либо проблемы из-за того, что мы обновим наш единственный веб-сервис таким образом?
Нужно ли обновлять клиент веб-службы, если веб-служба изменилась таким образом, что методы исходного клиента остались без изменений?
5 ответов
Нет. До тех пор, пока вы оставили методы, которые использует Продукт A, в одиночку, вам не нужно обновлять копию WebReference продукта A.
Просто чтобы добавить немного больше деталей к существующему ответу, единственными изменениями в веб-службе, которые требуют соответствующих изменений в прокси клиента, являются:
- Удаление методов;
- Изменение метода подписи;
- Изменение привязок / поведения (т. Е. Использовать шифрование).
Добавление нового метода или добавление новых полей / свойств к типу почти всегда являются неразрывными изменениями (тем не менее, тестирование с клиентом не повредит).
Имейте в виду, конечно, что клиент на самом деле не сможет использовать эти новые методы или свойства, пока они не перестроятся. Но это не нарушит существующую функциональность.
Обычно я бы сказал нет. Однако у нас есть один из 50+ клиентов, у которых есть проблемы с этим с помощью JAX-WS. Они получают ошибку как это:
javax.xml.ws.WebServiceException:
The Endpoint validation failed to validate due to the following errors:
:: Invalid Endpoint Interface :: :: The operation names in the WSDL portType
do not match the method names in the SEI or Web service implementation class.
wsdl operations = [...]
Я считаю, что это связано с этим:
В котором говорится: "Рекомендация. Обязательно создавайте артефакты на стороне клиента каждый раз, когда вы получаете обновленный файл WSDL".
Однако WSDL на стороне сервера проверяется во время выполнения в нашем клиентском экземпляре, поэтому он завершается ошибкой, как только мы добавляем новый метод. Я не знаю специфики или масштаба проблемы, но, похоже, вы можете написать реализацию клиента SOAP, которая порвет с новыми методами в WSDL, обслуживаемом службой.
Я не хотел вмешиваться в устаревшую ветку, и многие ключевые моменты уже были сделаны, но я хотел добавить примечание о переносе фреймворков. Время от времени у меня было необычное поведение после перехода с.Net 2.0 вплоть до 4.6. Я бы более подробно остановился на конкретных ошибках, но они были некоторое время назад.
Я также хочу добавить, что, несмотря на большинство этих комментариев, у меня были многочисленные проблемы от клиентов, которые НЕ обновляли веб-ссылки даже после минимальных изменений, описанных здесь. И я мог бы добавить, что это может быть результатом более новой платформы. В течение многих лет я читал во многих местах MSDN, что WSDL всегда должен быть восстановлен.
Я на самом деле искал технику, чтобы сделать это автоматически. Чтобы предотвратить сбои на стороне клиента при обновлении веб-сервисов. Я споткнулся через эту тему в этом поиске.
Не совсем ответ, но слишком длинный комментарий.
Хотя я согласен с тем, что, вероятно, не возникнет никаких проблем, если не обновлять ссылки на службы существующих клиентов, вам следует также спросить, какие будут проблемы, если вы обновите ссылки на службы существующих клиентов. Обязательно протестируйте и этот сценарий.
Хотя мы склонны думать о добавлении метода к службе как о чем-то важном только на сервере, имейте в виду, что когда обновляется ссылка на службу, это фактически меняет код клиента.
Некоторые организации верят в тестирование клиентского кода при изменении клиентского кода.