C'è un file PHP
che funge da webservice
, e c'è il file wsdl
in cui ci sono queste righe:
<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>
Il problema è che l'indirizzo IP del computer in cui risiedono webservice
e wsdl
è 192.168.1.123 e ottengo dati quando chiami una function dal servizio web PHP
! Quindi il <soap:address
tag <soap:address
non è necessario?
Risposta breve: l'indirizzo è solo un'indicazione (per gli sviluppatori o gli strumenti che generano codice e configuration) di where il servizio potrebbe essere accessibile e che tipo di URL attendersi.
Risposta lunga: se si guarda lo schema WSDL , si vedrà che l'elemento port
è definito come contenente solo un name
e binding
attributo di binding
, quindi sarà sufficiente. Il tuo elemento di servizio potrebbe sembrare così e sarà tecnicamente corretto:
<service name="ClientService"> <port name="ClientPort" binding="typens:ClientBinding" /> </service>
Ma la port
è anche definita come un elemento estensibile che consente di aggiungere elementi da altri spazi dei nomi (come <soap:address>
).
Normalmente (sì!) Il <soap:address>
dovrebbe indicare where è esposto il vero servizio, ma sfortunatamente non succede sempre così a causa di diversi fattori come:
I WSDL sono principalmente utilizzati per generare codice client. Una volta fatto ciò non hai più bisogno del WSDL, hai solo bisogno di un URL where connetterti al servizio web distribuito. L'indirizzo è lì come suggerimento per gli strumenti per aggiungere alcune configurazioni di default, che in seguito sostituirai con l'indirizzo REAL per le chiamate.
Idealmente, ciò che è nel WSDL dovrebbe essere uguale all'indirizzo reale, ma sono alcune informazioni che di solito ricadono durante le attività di manutenzione e le cose finiscono per diventare obsolete. Dovresti specificarne uno come suggerimento, anche se è solo <soap:address location="http://localhost/imfmobile/webservice/InterfaceTransfererClient.php"/>
.