Inside ModelVirtualCasting #8: Applicazioni Silverlight sul client (OOB)

di Alessio Leoncini, in Silverlight,

Ottavo post per la serie su ModelVC, l'applicazione che abbiamo sviluppato ed illustrato nel corso della Real Code Conference 4.0, il 25 maggio 2010.

Ecco i link dei precedenti post:

  1. Introduzione ai epository
  2. Architettura interna dei repository
  3. La cache
  4. Come funziona CacheThis?
  5. II servizi
  6. SEO con ASP.NET 4.0
  7. CCome ti creo una form MVC in 20 secondi (a dire tanto...)

Con la versione 3.0 del plugin abbiamo avuto la possibilità di installare sul client le nostre applicazioni Silverlight, in modo che possano essere eseguite al di fuori del contesto del browser dandoci la possibilità di creare vere e proprie applicazioni che l'utente può eseguire facendo doppio click su una voce del menu piuttosto che su un collegamento sul desktop. Come più volte mi è capitato di dire, uno degli scenari più interessanti di questa funzionalità è sicuramente la possibilità di creare applicazioni anche per gli ambienti Apple, oltre alla possibilità di creare applicazioni che possano essere eseguite in modalità offline, cioè senza la necessità di una connessione immediata ad internet.

Con questi presupposti, nella quarta versione del plugin Microsoft ha lavorato ad incrementare le funzionalità disponibili in modalità Out Of Browser, dandoci una maggiore possibilità di interazione con il pc dell'utente sotto un'esplicita richiesta di elevazione di privilegi all'applicazione stessa, che l'utente deve accettare durante l'installazione. Tale modalità è impostabile con un semplice parametro nelle proprietà del progetto.

Nel progetto ASPItalia.ModelVirtualCasting.Silverlight.BackOffice, che trovate nei sorgenti del progettosu Codeplex, ho utilizzato la modalità full-trust per andare a scrivere un documento di testo all'interno della cartella "My Documents", cosa che non avrei potuto assolutamente fare (e per fortuna :P) in nessun altro contesto di applicazione web, se non sotto esplicita dialog scelta dall'utente (#58).

Il codice è molto semplice:

public void Save()
{
    if (Application.Current.HasElevatedPermissions)
    {
      string myDocuments = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
      string filename = "test.txt";
      string path = System.IO.Path.Combine(myDocuments, filename);
      string outData = string.Empty;
  
      foreach (People item in People)
      {
          outData += ASPItalia.ModelVirtualCasting.Silverlight.BackOffice.Manager.Helper.ObjectToString(item);
      }
      File.WriteAllText(path, outData);
    }
}

Il fulcro è la classe Environment che ci permette queste ed altre modalità di interazione con il sistema ospite, interessante anche in ambiti Windows Phone 7.

Un'altra delle funzionalità potenzialmente molto interessanti (ma altrettanto controverse) disponibili in contesto full-trust è la possibilità di istanziare oggetti COM e quindi interagire con applicazioni unmanaged installate sulla macchina dell'utente. Nell'applicazione trovate una implementazione di esportazione dei dati in Excel così come abbiamo visto nello script #87. Certo, questa funzionalità apre un mondo di possibilità che possono elevare la nostra applicazione Silverlight a vera applicazione desktop (pensate ad esempio all'interazione con uno scanner o un fax) ma va sempre ponderato bene quanto si compromette la portabilità dell'applicazione stessa tra i diversi sistemi degli utenti del nostro prodotto.

Infine, voglio farvi notare una funzione che ho trovato fin da subito molto molto comoda, soprattutto per la semplicità di implementazione: dopo che l'applicazione è stata installata sul pc dell'utente, questa può controllare autonomamente la presenza sul webserver (dal quale è stata scaricata) di una versione aggiornata, scaricare la nuova versione, oltre alla possibilità di creare una logica di semplice notifica all'utente o anche di un blocco fino a quando l'utente non chiude e riapre l'applicazione .

Nel backoffice in Silverlight trovate il seguente codice nel costruttore dell'UserControl principale:

public MainPage()
{
    InitializeComponent();
    Application.Current.CheckAndDownloadUpdateCompleted += new CheckAndDownloadUpdateCompletedEventHandler(Current_CheckAndDownloadUpdateCompleted);
    Application.Current.CheckAndDownloadUpdateAsync();
}

void Current_CheckAndDownloadUpdateCompleted(object sender, CheckAndDownloadUpdateCompletedEventArgs e)
{
    if (e.UpdateAvailable)
    {
        MessageBox.Show("Il programma è stato aggiornato, chiudere e riaprire l'applicazione");
    }
}

Come vedete, tutto si basa sulla gestione dell'evento CheckAndDownloadUpdateAsync, il cui UpdateAvailable diCheckAndDownloadUpdateCompletedEventArgs ci informa dell'avvenuto download del nuovo XAP. Con poche righe di codice abbiamo a disposizione una semplificazione di deploy "Click Once", comodissimo nell'ambito di applicazioni installate. Sono contento che in MS abbiano pensato immediatamente a questa funzione non appena hanno inserito la modalità OOB :).

Per questo ed altro, vi invito a scaricare i sorgenti dell'applicazione: spero che possiate trarne spunti utili su cosa e come sia possibile sviluppare nelle applicazioni Silverlight.

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Nella stessa categoria
I più letti del mese