di: Roberto Brunetti 30 Giugno 2010
L'unico store disponibile, vista l'assenza in questa prima versione, di SQL Compact Edition (che in realtà è presente sul device ma non accessibile dal codice della sandbox) è l'Isolated Storage ben conosciuto a chi sviluppa applicazioni Silverlight.
Diversamente da "Silverlight Web", l'isolated storage non ha limiti sulla dimensione quindi abbiamo a disposizione tutto lo spazio disponibile sul device.
L'Isolated Storage divide lo spazio disco in spazi isolati per ogni applicazione: è impossibile accedere all'isolated storage di un'altra applicazione tramite le API, così come è impossibile accedere al file system del device da una applicazione: questo spazio può essere considerato quindi sicuro rispetto ad accessi indesiderati. Lo spazio viene creato all'installazione dell'applicazione e viene eliminato alla sua disinstallazione da parte dell'utente.
Le API messe a disposizione consentono di sfruttare lo storage in due diverse modalità: la prima per memorizzare file, dati, media e così via, la seconda per memorizzare le impostazioni delle applicazioni. Qualche riga di codice vale più di mille parole. Le righe di codice sono pilotate dalla seguente user interface:
Lasciando i nomi dei controlli ai valori di default, questo il codice per scrivere (button1_Click) un file nell'Isolated Storage e per leggere (button2_Click) il file appena creato.
public partial class MainPage : PhoneApplicationPage
{
public MainPage()
{
InitializeComponent();
SupportedOrientations = SupportedPageOrientation.Portrait | SupportedPageOrientation.Landscape;
}
private button1_Click(Object sender, RoutedEventArgs e)
{
IsolatedStorageFile myStore = IsolatedStorageFile.GetUserStoreForApplication();
myStore.CreateDirectory("RootFolder");
StreamWriter writeFile = new StreamWriter(
new IsolatedStorageFileStream("RootFolder\\myFile.txt", FileMode.OpenOrCreate, myStore));
writeFile.WriteLine(textBox1.Text);
writeFile.Close();
writeFile.Dispose();
}
private button2_Click(Object sender, RoutedEventArgs e)
{
IsolatedStorageFile myStore = IsolatedStorageFile.GetUserStoreForApplication();
StreamReader readFile = new StreamReader(
new IsolatedStorageFileStream("RootFolder\\myFile.txt", FileMode.Open, myStore));
string fileText = readFile.ReadLine();
textBox1.Text = fileText;
writeFile.Close();
writeFile.Dispose();
}
}
La prima operazione da eseguire è ottenere un riferimento allo store tramite il metodo statico GetUserStoreForApplication; il risultato è appunto una istanza di tipo IsolatedStorageFile, che, a discapito del nome, rappresenta lo storage dove poter memorizzare file e directory.
La riga successiva infatti crea una directory denominata RootFolder in cui inserire un file, tramite un IsolatedStorageFileStream. Nel nostro caso stiamo creando (o riaprendo se già esiste) un file denominato myFile.txt dove eseguire una WriteLine del contenuto del textbox (TextBox1).
Il codice per rileggere il contenuto del file prevede le stesse operazioni utilizzando uno StreamReader al posto dello StreamWriter. In questo caso eseguiamo un ReadLine per valorizzare poi il TextBlock presente sulla page.
Oltre allo spazio per salvare manualmente elementi, l'Isolated Storage consente di salvare impostazioni applicative senza bisogno di definire un file flat e il codice per impacchettare e spachettare le informazioni. Il terzo e quarto pulsante della page precedente gestiscono queste operazioni:
private button4_Click(Object sender, RoutedEventArgs e)
{
textBox2.Text = IsolatedStorageSettings.ApplicationSettings["Data"].ToString();
}
private button3_Click(Object sender, RoutedEventArgs e)
{
IsolatedStorageSettings.ApplicationSettings["Data"] = DateTime.Now.ToString();
// N.B. Save automatico quando si chiude l'applicazione
// se stateless è bene salvare subito
IsolatedStorageSettings.ApplicationSettings.Save();
}
}
Nel nostro esempio è presente una nota che apre una discussione sulla modalità con cui girano le applicazioni in foreground rispetto all'attivazione di Chooser e Launcher, rispetto all'apertura di nuove applicazioni e rispetto all'arrivo di richieste da parte del sistema, discussione che richiede un articolo separato. È comunque buona norma persistere le informazioni a fronte di una modifica alle impostazioni stesse.
Per quanto riguarda la connettività verso servizi, è disponibile un subset di WCF allineato a quanto conosciamo con Silverlight 3: importante sottolineare come l'accesso ai servizi sia asincrono per definizione e consenta chiamate SOAP, REST e JSON verso i servizi.
Guida Windows Azure Code SnippetsLe migliori pratiche per far girare le applicazioni "in the cloud",... |
Guida ASP.NET MVC Best PracticesUn workflow dettagliato e ricco di suggerimenti pratici per... |
Guida ASP.NET Starter KitUn modo semplice per imparare ad utilizzare le tecnologie Microsoft... |
Ogni giovedì, direttamente nella tua e-mail: articoli, guide, tutorial e script ASP, ASP.Net, SQL server e IIS.
Iscriviti alla newsletter
|
|
Corso Progettazione database11 Maggio 2012 a Milano |
|
|
Amministratore di Reti Windows Server 200811 Giugno 2012 a Milano |
|
Nessun corso previsto |