Добавление методов в веб-сервис: нужно ли старым клиентам обновлять веб-ссылки? - PullRequest
16 голосов
/ 27 января 2010

ProductA использует наш единственный веб-сервис, который является отдельным развертыванием от ProductA. Мы развернем оба к производству.

Позже мы пишем ProductB. В ходе этой работы мы добавляем новый метод в наш единственный веб-сервис. Этого нового метода не было в WSDL, когда поставляется ProductA. Мы не вносим никаких изменений в ProductA в процессе разработки.

Когда мы внедряем ProductB в производство, мы также внедряем (в производство) новую версию нашего единственного веб-сервиса (по тому же URL-адресу конечной точки, где ProductA ожидает его найти). Мы не перераспределяем ProductA в производство.

WSDL для нашего единственного веб-сервиса изменился в рабочей среде, но сигнатуры методов, используемых ProductA, не изменились. Они все еще в WSDL.

Будут ли у ProductA какие-либо проблемы из-за того, что мы обновим наш единственный веб-сервис таким образом?

Нужно ли обновлять клиент веб-службы, если веб-служба изменилась таким образом, что методы исходного клиента остались без изменений?

Ответы [ 5 ]

14 голосов
/ 10 февраля 2010

Нет. Пока вы оставили методы, которые использует Продукт A, в одиночку, вам не нужно обновлять копию WebReference продукта A.

13 голосов
/ 10 февраля 2010

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

  • Методы удаления;
  • Изменение сигнатур метода;
  • Изменение привязок / поведения (т. Е. Использовать шифрование).

Добавление нового метода или добавление новых полей / свойств к типу почти всегда являются неизменными изменениями (тем не менее, тестирование с клиентом не повредит).

Имейте в виду, конечно, что клиент на самом деле не сможет использовать эти новые методы или свойства, пока они не будут перестроены. Но это не сломает существующую функциональность.

2 голосов
/ 03 мая 2017

Я не хотел вмешиваться в устаревшую ветку, и многие ключевые моменты уже были сделаны, но я хотел добавить примечание о переносе фреймворков. Время от времени у меня было необычное поведение после перехода с .Net 2.0 вплоть до 4.6. Я бы более подробно остановился на конкретных ошибках, но они были некоторое время назад.

Я также хочу добавить, что, несмотря на большинство этих комментариев, у меня были многочисленные проблемы от клиентов, которые НЕ обновляли веб-ссылки даже после минимальных изменений, описанных здесь. И я мог бы добавить, что это может быть результатом более новые рамки. В течение многих лет я читал во многих местах в MSDN, что WSDL всегда следует восстанавливать.

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

Не совсем ответ, но слишком длинный комментарий для комментария.

2 голосов
/ 25 апреля 2013

Обычно я бы сказал нет. Тем не менее, у нас есть один из 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 = [...] 

Я полагаю, это связано с этим:

http://pic.dhe.ibm.com/infocenter/wasinfo/v8r0/index.jsp?topic=%2Fcom.ibm.websphere.nd.multiplatform.doc%2Finfo%2Fae%2Fae%2Ftwbs_devjaxws_exposewebmethod.html

В котором говорится: " Рекомендация : обязательно создавайте артефакты на стороне клиента каждый раз, когда вы получаете обновленный файл WSDL."

Однако WSDL на стороне сервера проверяется во время выполнения в нашем клиентском экземпляре, поэтому он перестает работать, как только мы добавляем новый метод. Я не знаю специфики или масштаба проблемы, но, похоже, вы можете написать реализацию клиента SOAP, которая порвет с новыми методами в WSDL, обслуживаемом службой.

1 голос
/ 10 февраля 2010

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

Хотя мы склонны думать о добавлении метода к службе как о чем-то важном только на сервере, имейте в виду, что при обновлении ссылки на службу это фактически меняет код клиента.

Некоторые организации верят в тестирование клиентского кода при изменении клиентского кода.

...