Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Consumare un Web service

Accedere ai servizi Web usando le classi proxy generate automaticamente da VWD
Accedere ai servizi Web usando le classi proxy generate automaticamente da VWD
Link copiato negli appunti

Cos'è un Web service?

Un servizio Web, in inglese Web service, è un'applicazione a cui si può accedere attraverso il web, cioè attraverso internet. La caratteristica fondamentale del Web service è la sua interfaccia verso la rete. Questa interfaccia deve essere standard, cioè deve poter essere compresa da una qualunque applicazione che vuole fare uso del servizio, e che, quindi, deve essere in grado di comunicare con esso.

Un'applicazione che usa un Web service viene detta applicazione che "consuma" il Web service.

La maggior parte dei Web service, per assicurare la massima interoperabilità con le altre applicazioni web, potenziali consumatrici del servizio, usa degli standard che sono:

  • il linguaggio XML, usato per scambiare i messaggi;
  • il protocollo HTTP usato per trasportare i messaggi attraverso la rete internet;
  • il WSDL che è un formato automaticamente elaborabile, con cui si descrive l'interfaccia software del Web service.

Con ASP.NET è possibile usare un Web service invocandolo come un normale oggetto, grazie ad un meccanismo di classi che fanno da "intermediarie": le classi proxy. In particolare il VWD genera dinamicamente le classi proxy, basandosi sul documento WSDL.

L'esempio

Cerchiamo di capire come "consumare" un Web service con un semplice esempio ed andiamo su un sito che offre vari servizi Web.

Figura 1. Servizi Web su www.webservicex.net
Servizi Web su www.webservicex.net

Scegliamo il servizio Web Stock Quote cliccandoci sopra.

Ci appare una descrizione del servizio e la locazione dello schema WSDL.

Figura 2. Descrizione del servizio Stock Quote
Descrizione del servizio Stock Quote

Prendiamo la locazione: http://www.webservicex.net/stockquote.asmx?WSDL ed apriamola nel browser.

Figura 3. Visualizzazione nel browser dello schema WSDL
Visualizzazione nel browser dello schema WSDL

Se nel nostro progetto non c'è ancora una cartella App_Code, creiamola e salviamoci dentro il file visualizzato nel browser, contenente lo schema WSDL del servizio Web, con estensione .wsdl. Per il nostro esempio, salviamo il file in App_Code con nome stockquote.wsdl.

Finalmente possiamo creare la pagina che fruisce del servizio, una pagina in cui possiamo inserire il simbolo del titolo azionario che ci interessa in una TextBox, e che, dopo aver cliccato su un Button, restituisca la quotazione in una Label. Un esempio è il seguente:

Figura 4. Realizzare la pagina per consumare il servizio
Realizzazione della pagina per consumare il servizio

La pagina è molto semplice e dobbiamo solo gestire l'evento del click sul bottone. Con un doppio click passiamo alla parte codice interno ed implementiamo il metodo btnOttieniQuotazione_Click. Dobbiamo istanziare un oggetto della classe StockQuote, quindi digitiamo sto. Notiamo che l'intellisense del VWD riconosce il comando e ci propone il nome della classe StockQuote.

Figura 5. Suggerimento dell'intellisense
Suggerimento dell'intellisense

Possiamo quindi affermare che la classe proxy è stata generata dinamicamente. Utilizzando l'intellisense andiamo avanti nell'implementazione dell'esempio. Il codice completo del metodo per ottenere la quotazione è il seguente:

Listato 1. btnOttieniQuotazione_Click

protected void btnOttieniQuotazione_Click(object sender, EventArgs e)
{
  StockQuote ws = new StockQuote();
  lblQuotazione.Text = ws.GetQuote(tbSimbolo.Text);
}

Salviamo e testiamo la nostra applicazione.

Mettiamo ad esempio il simbolo GE della General Electric e premiamo il pulsante. Otteniamo:

Figura 6. Consumo del servizio Stock Quote
Consumo del servizio

Nella quotazione che ci ritorna abbiamo molte informazioni che possiamo naturalmente parsare. Possiamo notare da sinistra verso destra: il simbolo, l'ultima quotazione, la data della quotazione, l'ora etc. Per completezza riportiamo lo schema a cui possiamo attingere per parsare la stringa:

Listato 2. Stringa in formato XML

<StockQuotes>
<Stock>
<Symbol>GE</Symbol>
<Last>34.33</Last>
<Date>5/26/2006</Date>
<Time>4:00pm</Time>
<Change>-0.09</Change>
<Open>34.47</Open>
<High>34.53</High>
<Low>34.10</Low>
<Volume>21190100</Volume>
<MktCap>357.0B</MktCap>
<PreviousClose>34.42</PreviousClose>
<PercentageChange>-0.26%</PercentageChange>
<AnnRange>32.21 - 37.13</AnnRange>
<Earns>1.579</Earns>
<P-E>21.80</P-E>
<Name>GEN ELECTRIC CO</Name>
</Stock>
</StockQuotes>

Se avessimo voluto consumare il servizio Web senza generare dinamicamente la classe proxy avremmo dovuto aggiungere una Web Reference al nostro progetto, quindi inserire l'URL del servizio e poi istanziare un oggetto con l'istruzione:

net.webservicex.www.StockQuote ws = new net.webservicex.www.StockQuote();

In definitiva il nostro metodo sarebbe stato:

Listato 3. Metodo senza generazione dinamica della classe proxy

protected void btnGetQuote_Click(object sender, EventArgs e)
{
  net.webservicex.www.StockQuote ws = new net.webservicex.www.StockQuote();
  lblStockQuote.Text = ws.GetQuote(tbCompanySymbol.Text);
}

Il sorgente dell'esempio sviluppato in questo articolo può essere scaricato da qui.

Ti consigliamo anche