More Related Content More from Microsoft Mobile Developer (20) Interagire con la Rete1. ITALIAN WEBINAR #4
INTERAGIRE CON LA RETE
Matteo Pagani
Nokia Developer Champion
Microsoft MVP – Windows Phone Development
Software Engineer @ Funambol
4. CONNETTIVITA’
•
•
•
•
E’ importante verificare la presenza di connettività prima di interagire con la
rete
La classe DeviceNetworkInformation nel namespace
Microsoft.Phone.Net.NetworkInformation permette di accedere alle
informazioni sulla connettività
Connessioni dati attive, connettività a Internet, informazioni sull’operatore
Possibilità di sottoscriversi all’evento NetworkAvailabilityChanged, che
viene scatenato ogni qualvolta cambia lo stato della connessione
© 2012 Nokia. All rights reserved.
© 2012 Microsoft. All rights reserved.
10/15/2013
7. INTERAGIRE CON LA RETE
•
•
•
L’SDK di Windows Phone include due classi native per interagire con la rete:
•
WebClient
•
HttpWebRequest
Nessuna delle due supporta, in modo nativo, l’approccio async e await
Hanno entrambe diversi limiti che ne rendono complicato l’utilizzo
© 2012 Nokia. All rights reserved.
© 2012 Microsoft. All rights reserved.
8. WEBCLIENT
private async void OnDownloadStringClicked(object sender, RoutedEventArgs e)
{
WebClient client = new WebClient();
client.DownloadStringCompleted += client_DownloadStringCompleted;
client.DownloadStringAsync(new Uri("url"));
}
void client_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
if (e.Error == null)
{
UI Thread
MessageBox.Show(e.Result);
}
}
© 2012 Nokia. All rights reserved.
© 2012 Microsoft. All rights reserved.
9. HTTPWEBREQUEST
private void OnDownloadStringClicked(object sender, RoutedEventArgs e)
{
webRequest = HttpWebRequest.CreateHttp("url");
webRequest.Method = "GET";
webRequest.BeginGetResponse(new AsyncCallback(ResponseCallback), webRequest);
}
private void ResponseCallback(IAsyncResult asyncResult)
{
HttpWebResponse webResponse = (HttpWebResponse)webRequest.EndGetResponse(asyncResult);
Stream stream = webResponse.GetResponseStream();
using (StreamReader reader = new StreamReader(stream))
{
string result = reader.ReadToEnd();
MessageBox.Show(result);
}
}
© 2012 Nokia. All rights reserved.
© 2012 Microsoft. All rights reserved.
10. WELCOME HTTPCLIENT
•
•
•
•
Il Windows Runtime ha introdotto una nuova classe: HttpClient
Per Windows Phone è disponibile come pacchetto su NuGet:
http://www.nuget.org/packages/Microsoft.Net.Http/
E’ utilizzabile anche nelle Portable Class Libraries
Espone un metodo asincrono per ogni comando del protocolo HTTP:
•
PostAsync()
•
PutAsync()
•
GetAsync()
•
DeleteAsync()
© 2012 Nokia. All rights reserved.
© 2012 Microsoft. All rights reserved.
11. DOWNLOAD
HttpClient client = new HttpClient();
Stream stream = await client.GetStreamAsync(“url");
HttpClient client = new HttpClient();
string result = await client.GetStringAsync(“url");
© 2012 Nokia. All rights reserved.
© 2012 Microsoft. All rights reserved.
12. UPLOAD
private async void OnSendPostClicked(object sender, RoutedEventArgs e)
{
HttpClient client = new HttpClient();
client.BaseAddress = new Uri("http://192.168.0.12:4484");
Stream stream = await
ApplicationData.Current.LocalFolder.OpenStreamForReadAsync("image.png");
StreamContent content = new StreamContent(stream);
var result = await client.PostAsync("/api/values", content);
}
© 2012 Nokia. All rights reserved.
© 2012 Microsoft. All rights reserved.
15. BACKGROUND TRANSFER
•
•
•
•
Le classi viste in precedenza funzionano solo se l’applicazione è in uso
Se l’applicazione viene sospesa, il trasferimento viene terminato
API introdotte in Windows Phone 7.5 per effettuare operazioni di download
e upload in grado di proseguire in background
Al centro l’utente: vincoli da rispettare per evitare l’eccessivo consumo di
batteria e il degrado delle performance
© 2012 Nokia. All rights reserved.
© 2012 Microsoft. All rights reserved.
16. BACKGROUND TRANSFER
•
•
•
Il sistema operativo mette a disposizione una coda
(BackgroundTransferService), nella quale aggiungere le operazioni di
trasferimento in background (BackgroundTransferRequest)
E’ possibile specificare le condizioni da rispettare per avviare il
trasferimento (solo rete WI-Fi, solo se in ricarica, in qualsiasi caso)
(TransferPreferences)
L’applicazione aggiunge le operazioni alla coda e, quando le condizioni
vengono rispettate, vengono eseguite
© 2012 Nokia. All rights reserved.
© 2012 Microsoft. All rights reserved.
17. VINCOLI
•
•
•
•
Dimensione massima download file:
•
20 MB se collegato alla rete cellulare
•
100 MB se collegato alla rete Wi-Fi
•
Illimitato se collegato alla rete Wi-Fi e in ricarica
Un’applicazione può mettere in coda massimo 25 operazioni
Il sistema operativo può gestire una coda di massimo 500 operazioni
Il sistema operativo può eseguire massimo due operazioni
contemporaneamente
© 2012 Nokia. All rights reserved.
© 2012 Microsoft. All rights reserved.
18. ALCUNI CONSIGLI
•
•
•
I download in background devono necessariamente salvare i file nella
cartella /Shared/Transfers nello storage
Ad ogni caricamento dell’app, bisogna verificare lo stato delle operazioni:
potrebbero essere terminate in background
Ogni volta che un’operazione è terminata, occorre rimuoverla manualmente
dalla coda
© 2012 Nokia. All rights reserved.
© 2012 Microsoft. All rights reserved.
19. WINDOWS PHONE TOOLKIT
•
•
•
Include un controllo, TransferControl, e una classe, TransferMonitor, che
permettono di gestire la rappresentazione visuale dello stato del
trasferimento
TransferControl è un controllo XAML, che mostra una progress bar con una
descrizione testuale
TransferMonitor è una classe che funge da «wrapper» verso il gestore della
coda (BackgroundTransferService)
© 2012 Nokia. All rights reserved.
© 2012 Microsoft. All rights reserved.
22. SERVIZI WCF, SOAP O ODATA
•
•
•
Per i servizi WCF, SOAP e oData Visual Studio è in grado di generare una
classe proxy, che permette di interagire mantenedo l’approccio a oggetti
Per oData, è necessarie installare un plugin per VS:
http://s.qmatteoq.com/oDataWP8
Vengono aggiunti al progetto tramite il menu Add service reference di
Visual Studio
© 2012 Nokia. All rights reserved.
© 2012 Microsoft. All rights reserved.
23. SERVIZI REST
•
•
•
Le interazioni con il servizio sono gestite con i comandi standard del
protocollo HTTP (POST, GET, PUT, DELETE)
Le risposte vengono formattate utilizzando gli standard XML o JSON
Sono i più diffusi al giorno d’oggi:
•
Compatibilità con tutte le piattaforme
•
Semplicità di uso
•
Utilizzo di formati standard
© 2012 Nokia. All rights reserved.
© 2012 Microsoft. All rights reserved.
24. SERIALIZZAZIONE
•
•
•
•
L’unico inconveniente nel lavorare con i servizi REST è che restituiscono
strutture dati «piatte», al contrario della logica ad oggetti dell’applicazione
Serializzare = trasformare in oggetti una struttura di dati espressa in XML o
JSON
Deserializzare = trasformare una struttura dati XML o JSON in oggetti
Esistono librerie in grado di effettuare questa procedura in automatico
© 2012 Nokia. All rights reserved.
© 2012 Microsoft. All rights reserved.
25. HTTPCLIENT
•
HttpClient:
•
semplice da utilizzare
•
supporta async e await
•
compatibile con tutte le tecnologie Microsoft
•
supporta tutti i comandi standard del protocollo HTTP
•
serializzazione e deserializzazione vanno gestite manualmente
© 2012 Nokia. All rights reserved.
© 2012 Microsoft. All rights reserved.
26. JSON.NET
•
•
•
•
Libreria open source disponibile su NuGet:
http://www.nuget.org/packages/Newtonsoft.Json/
Supporta funzionalità di serializzazione e deserializzazione
Supporta LINQ to JSON, un linguaggio di manipolazione di dati in JSON
analogo a LINQ to XML
Offre performance e funzionalità superiori rispetto alla serializzazione
nativa inclusa nel framework (DataContractJsonSerializer)
© 2012 Nokia. All rights reserved.
© 2012 Microsoft. All rights reserved.
27. RESTSHARP
•
RestSharp:
•
più completa
•
serializza e deserializza in automatico i dati
•
utilizza l’approccio asincrono basato su callback
•
poco flessibile in alcuni scenari
•
non disponibile per tutte le tecnologie Microsoft (esempio: no Windows
Store Apps).
© 2012 Nokia. All rights reserved.
© 2012 Microsoft. All rights reserved.