Почему веб-сервис возвращает данные, даже если IP-адрес в wsdl неверен?

СуществуетPHP файл действует какwebservice и естьwsdl файл, в котором есть эти строки:

<service name="ClientService">
    <documentation></documentation>
    <!-- partie 8 : Port -->
        <port name="ClientPort" binding="typens:ClientBinding">
            <soap:address location="http://192.168.1.12/imfmobile/webservice/InterfaceTransfererClient.php"/>
        </port>
</service>

Проблема в том, что IP-адрес компьютера, на которомwebservice иwsdl Reside 192.168.1.123, и я получаю данные при вызове функции изPHP веб-сервис ! Так это<soap:address тег не нужен?

Ответы на вопрос(1)

Решение Вопроса

Краткий ответ: Адрес является просто указанием (для разработчиков или инструментов, которые генерируют код и конфигурацию) того, где служба может быть доступна и какой URL ожидать.

Длинный ответ: Если вы посмотрите наСхема WSDL, вы увидите, чтоport элемент определяется как содержащий толькоname а такжеbinding атрибут, так что этого будет достаточно. Ваш сервисный элемент может выглядеть так, и это будет технически правильно:

<service name="ClientService">
   <port name="ClientPort" binding="typens:ClientBinding" />
</service>

Ноport также определяется как расширяемый элемент, который позволяет добавлять в него элементы из других пространств имен (например,<soap:address>).

Обычно (да!)<soap:address> следует указать, где выставлен реальный сервис, но, к сожалению, это не всегда происходит из-за различных факторов, таких как:

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

WSDL в основном используются для генерации клиентского кода. После этого вам больше не нужен WSDL, вам просто нужен URL-адрес для подключения к развернутому веб-сервису. Этот адрес служит подсказкой для инструментов для добавления некоторой конфигурации по умолчанию, которую вы позже замените РЕАЛЬНЫМ адресом для вызовов.

В идеале то, что находится в WSDL, должно совпадать с реальным адресом, но это некоторая информация, которая обычно не справляется с задачами по техническому обслуживанию, и вещи в конечном итоге устаревают. Вы должны указать один как подсказку, даже если это просто<soap:address location="http://localhost/imfmobile/webservice/InterfaceTransfererClient.php"/>.

Ваш ответ на вопрос