Ora che abbiamo definito anche il portType non ci rimane altro da fare che collegarlo con il protocollo SOAP che vedremo nel prossimo capitolo grazie all'elemento <binding>
. All'interno di questa guida vedremo solamente un binding soap di tipo HTTP RPC, di gran lunga il più utilizzato. Ad ogni modo, e per completezza, sappiate che ne esistono ancora e che in futuro potranno esserne aggiunti altri.
<binding name="gestioneUtentiBinding" type="tns:gestioneUtentiType">
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="getUserById">
<soap:operation soapAction="https://www.html.it/guida_ai_Web services/esempio.php/getUserById" style="rpc"/>
<input>
<soap:body use="encoded" namespace="https://www.html.it/guida_ai_Web services" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</input>
<output>
<soap:body use="encoded" namespace="https://www.html.it/guida_ai_Web services" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</output>
</operation>
<operation name="saveUser">
<soap:operation soapAction="https://www.html.it/guida_ai_Web services/esempio.php/saveUser" style="rpc"/>
<input>
<soap:body use="encoded" namespace="https://www.html.it/guida_ai_Web services" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</input>
</operation>
</binding>
Come vediamo nell'esempio esistono due elementi binding, il primo appartenente al namespace di WSDL ed il secondo appartenente a SOAP. Ovviamente sono due elementi diversi. Il primo ha due attributi, uno indica il nome dell'elemento (inserito a piacere) e l'altro il tipo del binding cioè il nome del nostro <portType>
.
Una volta collegato il portType al binding possiamo proseguire con il secondo elemento di questo tipo, quello appartenente a SOAP. Anche questo elemento ha due attributi: uno stile che può essere inpostato a rpc
o document
ed un attributo transport
. In questo caso noi usaremo rpc
come style poichè è adatto a messaggi che contengono parametri e valori di ritorno. Lo stile document
si usa invece quando i messaggi contengono dei documenti ed è bene tener presente che utilizzandolo è necessario apportare delle modifiche (che non vedremo in questa guida) al modo in cui sono costruiti gli elementi <soap:body>
. L'attributo transport
indica il protocollo da utilizzare con soap per comunicare e come possiamo leggere nell'URI abbiamo scelto HTTP.
Giunti a questo punto, dopo aver definito i due elementi "binding" possiamo passare alla parte più interessante: definire i dettagli per le operazioni.
Con il primo tag operation
, quello più esterno, richiamiamo le operazioni che abbiamo già definito nell'elemento <portType>
e per ognuna di queste definiamo il valore soapAction
e confermiamo lo stile attraverso soap:operation
. Come valore di soapAction
ho inserito un URI che nel mezzo ha un file php. Questo serve per sottolineare che l'attributo soapAction è molto importante (oltre che indispensabile) poichè ci servirà come descrizione dell'azione richiesta per il web service (e ne parleremo alla fine del capitolo SOAP).
All'interno del tag operation
, dopo aver impostato l'elemento <soap:operation>
bisogna elencare come saranno comunicati messaggi. Per farlo, ad ogni messaggio previsto dall'operazione che stiamo descrivendo dopo aver specificato il tipo con gli appositi tag (input, output o fault) va inserito un elemento soap:body
.
<soap:body>
specifica come le parti del messaggio appariranno all'interno dell'elemento body di SOAP (che vedremo più avanti) ed imposta la codifica da utilizzare se si è deciso di utilizzarla. Se non si desidera la codifica si può impostare l'attributo use
con valore literal
.
Ora che abbiamo concluso il binding manca un ultima piccola parte, la definizione del servizio:
<service name="ServizioUtenti">
<port name="GestioneUtenti" binding="tns:gestioneUtentiBinding">
<soap:address location="https://www.html.it/guida_ai_Web services/esempio.php"/>
</port>
</service>
Scegliamo il nome per il servizio e colleghiamo una porta al al binding; per questa porta definiamo un punto di comunicazione conl'attributo location
(spiegheremo il suo ruolo nel capitolo SOAP). Finalmente abbiamo incontrato e realizzato tutte le parti di un documento WSDL. Potete quindi vedere la versione completa del nostro WSDL.
Purtroppo WSDL è molto complesso e non è stato possibile vedere nel dettaglio ogni aspetto ed ogni variante. Tuttavia, giunti a questo punto, dovreste avere già le idee chiare su come si descrive un Web service e con pochi sforzi dovresteriuscire a leggere, interpretare o realizzare un documento WSDL.