Подтвердить что ты не робот

Добавление методов в веб-сервис: нужно ли старым клиентам обновлять веб-ссылки?

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

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

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

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

У продукта ProductA возникнут проблемы из-за нашего обновления нашего веб-сервиса таким образом?

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

4b9b3361

Ответ 1

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

Ответ 2

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

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

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

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

Ответ 3

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

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

Некоторые организации считают, что при тестировании кода клиента происходит тестирование кода клиента.

Ответ 4

Обычно я бы сказал "нет". Однако у нас есть один из 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, обслуживаемом службой.

Ответ 5

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

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

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

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