+ All Categories
Transcript
Page 1: Interagire con la Rete

INTERAGIRE CON LA RETE

Matteo Pagani

Nokia Developer Champion

Microsoft MVP – Windows Phone Development

Software Engineer @ Funambol

ITALIAN WEBINAR #4

Page 2: Interagire con la Rete

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

Page 3: Interagire con la Rete

CONNETTIVITA’

© 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.

Page 4: Interagire con la Rete

• 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.

Page 5: Interagire con la Rete

CONNETTIVITA’ Demo

© 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.

Page 6: Interagire con la Rete

INTERAGIRE CON LA RETE

© 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.

Page 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

INTERAGIRE CON LA RETE

© 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.

Page 8: Interagire con la Rete

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

Page 9: Interagire con la Rete

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.

Page 10: Interagire con la Rete

• 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.

Page 11: Interagire con la Rete

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.

Page 12: Interagire con la Rete

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.

Page 13: Interagire con la Rete

HTTPCLIENT Demo

© 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.

Page 14: Interagire con la Rete

BACKGROUND TRANSFER

© 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.

Page 15: Interagire con la Rete

• 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.

Page 16: Interagire con la Rete

• 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.

Page 17: Interagire con la Rete

• 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.

Page 18: Interagire con la Rete

• 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.

Page 19: Interagire con la Rete

• 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.

Page 20: Interagire con la Rete

BACKGROUND TRANSFER Demo

© 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.

Page 21: Interagire con la Rete

SERVIZI

© 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.

Page 22: Interagire con la Rete

• 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.

Page 23: Interagire con la Rete

• 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.

Page 24: Interagire con la Rete

• 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.

Page 25: Interagire con la Rete

• 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.

Page 26: Interagire con la Rete

• 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.

Page 27: Interagire con la Rete

• 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.

Page 28: Interagire con la Rete

SERVIZI Demo

© 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.

Page 29: Interagire con la Rete

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


Top Related