Date post: | 20-May-2015 |
Category: |
Technology |
Upload: | microsoft-mobile-developer |
View: | 466 times |
Download: | 3 times |
INTERAGIRE CON LA RETE
Matteo Pagani
Nokia Developer Champion
Microsoft MVP – Windows Phone Development
Software Engineer @ Funambol
ITALIAN WEBINAR #4
AGENDA
© 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.
• Determinare la connessione • Upload e download di file • Background transfer • Interagire con i servizi
CONNETTIVITA’
© 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.
• 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
CONNETTIVITA’
10/15/2013 © 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.
CONNETTIVITA’ Demo
© 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.
INTERAGIRE CON LA RETE
© 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.
• 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
INTERAGIRE CON LA RETE
© 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.
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)
{
MessageBox.Show(e.Result);
}
}
WEBCLIENT
© 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.
UI Thread
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);
}
}
HTTPWEBREQUEST
© 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.
• 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()
WELCOME HTTPCLIENT
© 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.
HttpClient client = new HttpClient();
Stream stream = await client.GetStreamAsync(“url");
HttpClient client = new HttpClient();
string result = await client.GetStringAsync(“url");
DOWNLOAD
© 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.
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);
}
UPLOAD
© 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.
HTTPCLIENT Demo
© 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.
BACKGROUND TRANSFER
© 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.
• 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
BACKGROUND TRANSFER
© 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.
• 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
BACKGROUND TRANSFER
© 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.
• 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
VINCOLI
© 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.
• 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
ALCUNI CONSIGLI
© 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.
• 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)
WINDOWS PHONE TOOLKIT
© 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.
BACKGROUND TRANSFER Demo
© 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.
SERVIZI
© 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.
• 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
SERVIZI WCF, SOAP O ODATA
© 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.
• 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
SERVIZI REST
© 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.
• 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
SERIALIZZAZIONE
© 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.
• 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
HTTPCLIENT
© 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.
• 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)
JSON.NET
© 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.
• 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).
RESTSHARP
© 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.
SERVIZI Demo
© 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.
10/15/2013 © 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.
Grazie!
Blog:
http://www.qmatteoq.com
http://wp.qmatteoq.com
Twitter: @qmatteoq
Mail: [email protected]
Materiale su http://sdrv.ms/164szm0