Краткий ответ: Адрес является лишь указанием (для разработчиков или инструментов, которые генерируют код и конфигурацию) того, где может быть доступна служба и какой 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"/>
.