Il presente articolo è stato tradotto automaticamente.

Windows Azure Insider

Windows 8 e Windows Azure: Incontro nella cloud

Bruno Terkaly
Ricardo Villalobos

Scarica il codice di esempio

Bruno Terkaly, Ricardo VillalobosNon c'è domanda poco che sviluppatore software di oggi deve abbracciare tecnologie cloud per creare applicazioni Windows Store convincente — il numero di utenti e dispositivi che non fare un-brainer. Più di un terzo della popolazione della terra è connessa a Internet e ora ci sono più dispositivi per accedere a risorse online che ci sono persone. Inoltre, il traffico dati mobile è cresciuto 2.3-fold nel 2011, più che raddoppiando per il quarto anno di fila. Non importa come la guarda, si finisce con una conclusione molto semplice: Applicazioni moderne richiedono connettività al cloud.

La proposta di valore del cloud computing è avvincente. Molti osservatori punto per la scalabilità on-demand e per il fatto che si paga solo per quello che si utilizza come guida le forze all'adozione del cloud. Tuttavia, la nube effettivamente fornisce una tecnologia essenziale nel mondo di più dispositivi collegati. Utenti di applicazioni Windows Store, probabilmente a utilizzare molte applicazioni e dispositivi multipli, si aspettano i dati da una posizione centrale. Se si salvano i dati su un dispositivo di Windows Phone, dovrebbe anche essere immediatamente disponibile su loro compresse o uno qualsiasi dei loro dispositivi, compresi i dispositivi Android e iOS.

Windows Azure è la piattaforma di cloud pubblico di Microsoft, che offre che la più grande portata globale e il servizio più completo back-end. Supporta l'utilizzo di opzioni multiple di OS, linguaggio, database e strumento, fornendo automatico OS e patch per il servizio. L'infrastruttura di rete sottostante offre il bilanciamento automatico del carico e la resilienza di un guasto hardware. Ultimo ma non meno importante, Windows Azure supporta un modello di distribuzione che consente agli sviluppatori di aggiornare le applicazioni senza tempi di inattività.

L'applicazione di servizio Web presentato in questo articolo può essere ospitato in uno o più datacenter cloud globale di Microsoft in pochi minuti. Se si sta creando un'applicazione elenco di cose da fare, un gioco o anche un'applicazione line-of-business di contabilità, è possibile sfruttare le tecniche in questo articolo per supportare gli scenari che si basano su entrambi i client collegati permanentemente o occasionalmente.

Che cosa imparerete

In primo luogo, descriviamo come costruire un semplice servizio di cloud hosting su Windows Azure per supportare client asincroni, indipendentemente dal tipo di dispositivo è in esecuzione su — telefono, slate, tablet, computer portatile o desktop. Quindi vi mostreremo come sia facile chiamare un servizio Web da un'applicazione Windows Store per recuperare i dati.

In generale, ci sono due modi di dati possono fare la sua strada in un'applicazione Windows Store. Questo articolo si concentrerà sull'approccio"pull" per il recupero dei dati, in cui l'applicazione deve essere in esecuzione e le richieste di dati vengono emessi tramite chiamate HTTP Web. L'approccio di tirare in genere sfrutta gli standard aperti (HTTP, JSON, Representational State Transfer [riposo]) e la maggior parte, se non tutti —­tipi di dispositivi di diversi fornitori possono trarne vantaggio.

Non coprire l'approccio"push" in questo articolo. Questo approccio si basa su Windows Push Notification Services (WNS), che consente di inviare dati non richiesti a un'applicazione Windows Store i servizi cloud ospitati. Tali applicazioni non è necessario essere in esecuzione in primo piano e non non c'è alcuna garanzia di recapito dei messaggi. Per informazioni sull'utilizzo di WNS, vedere bit.ly/RSXomc.

Due progetti

La soluzione completa richiede due componenti principali: un lato server o un progetto di servizi Web (che può essere distribuito on-premise o in Windows Azure) e un progetto sul lato client, che consiste in un'applicazione Windows Store basata sulla nuova interfaccia utente di Windows. Entrambi i progetti possono essere creati con Visual Studio 2012.

Fondamentalmente, esistono due opzioni per la costruzione del progetto di servizi Web: Windows Communication Foundation (WCF) o ASP.NET Web API, che è incluso con ASP.NET MVC 4. Perché esporre servizi tramite WCF è ampiamente documentato, per il nostro scenario useremo l'approccio più moderno che ASP.NET Web API porta al tavolo, veramente abbracciare concetti HTTP (URIs e verbi). Inoltre, questo quadro consente di creare servizi che utilizzano funzionalità più avanzate di HTTP, quali intestazioni di richiesta/risposta e ipermediali costrutti.

Entrambi i progetti possono essere testati su una singola macchina durante lo sviluppo. È possibile scaricare l'intera soluzione a archive.msdn.microsoft.com/mag201210AzureInsider.

Che cosa avete bisogno

Il punto di partenza più ovvio è che Windows 8 è necessario, e dovrebbe venire come nessuna sorpresa che i progetti devono essere creati utilizzando l'ultima versione di Visual Studio, che può essere scaricato a bit.ly/win8devtools.

Per il progetto sul lato server, è necessario Windows Azure SDK più recente, che comprende i necessari assembly e utensili per la creazione di progetti cloud dall'interno di Visual Studio. È possibile scaricare questo SDK e utensili relativi a bit.ly/NlB5OB. Inoltre avrete bisogno di un account di Windows Azure. Una prova gratuita può essere scaricata a bit.ly/azuretestdrive.

Storicamente, sapone è stato usato per i servizi Web di architetto, ma in questo articolo si concentrerà sulle architetture di stile REST. In breve, il resto è facile da usare, trasporta un carico minore e non richiede nessun utensili speciali.

Gli sviluppatori devono anche scegliere un formato di scambio di dati durante la creazione di servizi Web. Tale scelta è generalmente compreso tra JSON e XML. JSON utilizza un formato compatto basato sul linguaggio JavaScript. Esso è spesso definito come "alternativa senza grassi" XML perché ha una grammatica molto più piccola e mappe direttamente alle strutture di dati utilizzate nelle applicazioni client. Utilizzeremo i dati JSON in nostri campioni.

Con queste decisioni, siamo pronti per creare il nostro servizio Web. Il nostro obiettivo è quello di costruire un servizio basato su HTTP che raggiunge la più ampia gamma possibile di clienti, tra cui browser e dispositivi mobili.

Il servizio Web di costruzione

Iniziamo avviando Visual Studio 2012 come amministratore. Qui sono i passi per creare il servizio Web lato server, utilizzando l'API di Web ASP.NET MVC 4:

  1. Fare clic sul menu File e scegliere nuovo | Progetto (vedere Figura 1).
  2. Selezionare Visual c# | Web per il tipo di modello.
  3. Selezionare .NET Framework 4 nell'elenco a discesa nella parte superiore.
  4. Selezionare l'applicazione Web ASP.NET MVC 4.
  5. Immettere il nome del servizio Web e una posizione di vostra scelta.
  6. Scegliere OK.
  7. La procedura guidata vi chiederà di selezionare il modello di progetto. Scegliere Web API e assicurarsi che il motore di visualizzazione sia rasoio (predefinito), come mostrato Figura 2.
  8. Una varietà di file verrà generata da Visual Studio. Questo può essere travolgente, ma abbiamo solo bisogno di preoccuparsi per un paio di file, come mostrato Figura 3.

New Project Dialog Box
Figura 1 nuovo progetto dialogo

Project Template Dialog Box
Finestra di dialogo modello del progetto di figura 2

Solution Explorer for WebService
Figura 3 Esplora per WebService

ValuesController.cs è importante perché contiene il codice che viene eseguito quando il client di Windows 8 Invia una richiesta HTTP al servizio Web. Questo è dove aggiungeremo il codice per restituire i dati JSON richiesti dall'applicazione Windows Store. La classe ValuesController, illustrata Figura 4, è generato da Visual Studio e che eredita da ApiController, che restituisce i dati che ha serializzato e inviato al client, automaticamente in formato JSON.

Figura 4 ValuesController classe

 

public class ValuesController : ApiController
{
  // GET api/values
  public IEnumerable<string> Get()
  {
    return new string[] { "value1", "value2" };
  }
  // GET api/values/5
  public string Get(int id)
  {
    return "value";
  }
  // POST api/values
  public void Post([FromBody]string value)
  {
  }
  // PUT api/values/5
  public void Put(int id, [FromBody]string value)
  {
  }
  // DELETE api/values/5
  public void Delete(int id)
  {
  }
}

Si noti che i metodi in Figura 4— Get, Post, Put ed eliminare — mappa specifico per creare, leggere, aggiornare e cancellare le operazioni (CRUD) e verbi HTTP eseguiti dall'applicazione Windows Store.Questa è la bellezza del quadro ASP.NET Web API: Indirizza automaticamente i verbi HTTP utilizzati dal client direttamente ai metodi definiti nella classe ValuesController, minimizzare i potenziali errori di programmazione.

Fuori dalla scatola, il progetto di servizio Web è pronto per essere eseguito.I metodi nella classe ValuesController sono autoesplicativo:

 

// GET api/values
public IEnumerable<string> Get()
{
  return new string[] { "value1", "value2" };
}

Si noti che il metodo Get viene chiamato quando il client invia il verbo HTTP Get utilizzando l'URL http://localhost:[port]/api/values. Ai fini di questa dimostrazione, il codice Disegna cerchi concentrici basati sui colori restituiti dal servizio Web. Modificare il codice precedente simile a questa:

// GET api/values
public IEnumerable<string> Get()
{
  return new string[] { "#0000FF", "#000000", "#FF0000",
    "#FFFF00", "#00FF00" };
}

Come potete vedere, abbiamo ora restituiscono una matrice di stringhe di vari colori. L'applicazione di Windows Store che creiamo renderà queste stringhe con i colori reali, in particolare come cerchi concentrici colorati.

Prova con un Browser

È sempre una buona idea per testare il servizio Web prima di creare l'applicazione Windows Store. Utilizzare qualsiasi browser che ti piace.

Per testare il servizio Web da un browser, eseguire i passaggi seguenti:

  1. In Visual Studio, fare clic su Debug dal menu e scegliere Avvia debug.
  2. Si dovrebbe vedere la pagina iniziale predefinita, come mostrato Figura 5.
  3. Si noti che Visual Studio sceglie una porta arbitraria, in questo caso 58428. Il porto che utilizza l'istanza di Visual Studio sarà probabilmente diverso.
  4. Come ricorderete, abbiamo bisogno di aggiungere "api e i valori" all'URL, così viene chiamato il metodo Get, ovvero che l'URL finale (nel nostro caso) deve essere http://localhost:58428/api/values. Questa è una funzionalità incorporata quando Visual Studio crea il tuo progetto. È possibile modificare il mapping per le vostre esigenze.
  5. Vai alla barra di indirizzo di Visual Studio e digitare http://localhost:58428/api/values. Ricordati di sostituire il numero della porta con il proprio valore.
  6. Una finestra di dialogo apparirà come quella di Figura 6.
  7. Fare clic sul pulsante Salva, quindi aprite values.json in Notepad.
  8. Blocco note verrà visualizzati i valori restituiti. Si noti che nel Figura 7 che i dati restituiti è automaticamente in formato JSON, per gentile concessione del framework ASP.NET Web API.

Using Internet Explorer to Test the Web Service
Figura 5 utilizzando Internet Explorer per testare il servizio Web

Internet Explorer Dialog Box
Figura 6 Internet Explorer nella finestra di dialogo

The JSON Data Returned by the Web Service
Figura 7 i dati JSON restituiti dal servizio Web

Entrare in Windows 8

Ora che ci siamo riusciti abbiamo dati JSON di ritorno dal nostro servizio Web, vediamo come utilizzare i dati da un'applicazione Windows Store. L'obiettivo è di leggere i colori dal servizio Web e disegnare i cerchi concentrici, basati sui valori restituiti dal servizio Web. La nostra applicazione Windows Store finale dovrebbe produrre un'immagine che sembra Figura 8. I colori visualizzati sono stati definiti dal servizio Web. Se il servizio Web cambia i colori restituiti, l'applicazione Windows Store rifletterebbe quei colori come i cerchi concentrici che si vede in Figura 8.

The Running Windows Store Application
Figura 8 l'applicazione in esecuzione Windows Store

È possibile creare l'applicazione Windows Store nella stessa soluzione del progetto di servizio Web, o iniziare una nuova istanza di Visual Studio in particolare per il client di Windows 8. Inizieremo una nuova istanza di Visual Studio come amministratore per l'app Store di Windows. A tale scopo, attenersi alla seguente procedura (vedi Figura 9):

New Project Dialog Box
Figura 9 nuovo progetto dialogo

  1. Avviare una seconda istanza di Visual Studio come amministratore.
  2. Fare clic sul menu File e scegliere nuovo | Progetto.
  3. Selezionare Visual c# | Archivio di Windows per il tipo di modello.
  4. Selezionare .NET Framework 4 nell'elenco a discesa nella parte superiore.
  5. Selezionare App vuoto (XAML).
  6. Immettere il nome di Windows8Client e una posizione di vostra scelta.
  7. Scegliere OK.

Quando hai finito con questi passaggi, passare al menu Visualizza e scegliere Esplora (vedere Figura 10) e aprire il file MainPage.xaml.cs.

Solution Explorer for Windows8Client
Esplora figura 10 per Windows8Client

La chiamata al servizio Web

Siamo pronti per aggiungere il codice che esegue la chiamata al servizio Web dall'applicazione Windows Store. L'applicazione Windows Store invierà una richiesta Web contro il servizio Web.

Per supportare una richiesta Web, file MainPage.xaml.cs sarà modificato come segue:

  • Verrà aggiunto un evento Loaded per il controllo di griglia incorporato.
  • L'evento Loaded presenterà una richiesta Web asincrona per chiamare il servizio Web. La classe HttpClient verrà utilizzata per questo scopo.
  • Per convertire la stringa di colore dal servizio Web in un vero e proprio colore, verrà aggiunto un metodo chiamato CircleColorFromString.
  • Per disegnare i cerchi concentrici, aggiungiamo un metodo chiamato AddCircle.

Eseguire i passaggi seguenti per una richiesta Web contro il servizio Web:

  1. Fare clic destro il file MainPage. xaml e scegliere Visualizza finestra di progettazione.
  2. Aggiungere il GridLoadedEvent e il controllo di tela come segue (la tela è dove disegnamo i cerchi):

 

<Grid Name="maingrid"
      Background="{StaticResource
                   ApplicationPageBackgroundThemeBrush}"
      Loaded="GridLoadedEvent">
  <Canvas Name="myCanvas" Background="White"/>
</Grid>
  1. 3. Fare doppio clic sul file MainPage.xaml.cs.Viene visualizzata la finestra di codebehind per MainPage.xaml.cs.
  2. 4. Per sostenere gli spazi dei nomi differenti richiesti dal codice per essere aggiunti, includono i seguenti riferimenti all'inizio del file MainPage.xaml.cs:

 

using System.Net.Http;          // for HttpClient()
using Windows.Data.Json;        // for parsing JSON Array data
using Windows.UI.Xaml.Shapes;   // for the Ellipse object
using Windows.UI                // for the Color class
  1. 5. Aggiungere le routine di supporto per disegnare cerchi e analizzare i dati di stringa JSON inviati dal servizio Web.Modificare il codice nel file MainPage.xaml.cs in Figura 11.

Figura 11 MainPage.xaml.cs

 

public sealed partial class MainPage : Page
  {
    // [ Generated code omitted for brevity ]
    private void AddCircle(Color color, int diameter, int t, int l)
    {
      //
      // Build a circle using the attributes provided as parameters.
      //
      Ellipse newColoredCircle = new Ellipse();
      newColoredCircle.Fill = new SolidColorBrush(color);
      newColoredCircle.StrokeThickness = 1;
      newColoredCircle.Stroke = new SolidColorBrush(color);
      newColoredCircle.Width = diameter;
      newColoredCircle.Height = diameter;
      //
      // Add the circle to the Canvas control.
      //
      myCanvas.Children.Add(newColoredCircle);
      Canvas.SetTop(newColoredCircle, t);
      Canvas.SetLeft(newColoredCircle, l);
    }
    Color CircleColorFromString(string rgb)
    {
      //
      // Convert the string-based hex values
      // into a Color object and return to caller.
      //
      Color ringColor = new Color();
      byte a = 255;
      byte r = (byte)(Convert.ToUInt32(rgb.Substring(1, 2), 16));
      byte g = (byte)(Convert.ToUInt32(rgb.Substring(3, 2), 16));
      byte b = (byte)(Convert.ToUInt32(rgb.Substring(5, 2), 16));
      ringColor = Color.FromArgb(a, r, g, b);
      return ringColor;
    }
    private async void GridLoadedEvent(object sender, 
      RoutedEventArgs e)
    {
      //
      // Retrieve colors from Web service.
      //
      var client = new HttpClient();
      client.MaxResponseContentBufferSize = 1024 * 1024;
      //
      // Asynchronously call into the Web service.
      //
      var response = await client.GetAsync(
        new Uri("http://localhost:58428/api/values"));
      var result = await response.Content.ReadAsStringAsync();
      //
      // Parse the JSON data
      //
      var parsedResults = JsonArray.Parse(result);
      //
      // Build concentric circles, repeating colors as needed
      //
      const double startingPercentage = 1.0;
      const double desiredCircleCount = 50.0;
      for (int i = 0; i < desiredCircleCount; i++)
      {
        Color circleColor = CircleColorFromString(
          parsedResults[i % parsedResults.Count].GetString());
        int circleDiameter = Convert.ToInt32((startingPercentage –
          (i / desiredCircleCount)) * this.RenderSize.Width / 2.0);
        int top = Convert.ToInt32((this.RenderSize.Height -
          circleDiameter)/2.0);
        int left = Convert.ToInt32((this.RenderSize.Width -
          circleDiameter)/2.0);
        AddCircle(circleColor, circleDiameter, top, left);
      }
    }
}

 

Ora di testare l'applicazione, che è abbastanza semplice:

  1. Tornare al progetto WebService in Visual Studio e selezionare Avvia debug dal menu Debug.
  2. Verificare che il browser viene avviato. Ora sei pronto per avviare l'applicazione Windows8Client.
  3. Tornare al progetto in Visual Studio Windows8Client e selezionare Avvia debug dal menu Debug.
  4. Verificare l'applicazione Windows Store appare, come illustrato nella Figura 8.

Distribuzione del servizio Web in Windows Azure

Una volta che il servizio Web è stato creato e testato localmente, il passo logico successivo è per distribuirla nel cloud per scopi di scalabilità. Questo consente di variare la capacità di calcolo assegnata al servizio Web — ed il suo costo, come il numero di richieste da Windows 8 dispositivi aumenta o diminuisce. Visual Studio offre diversi modi per distribuire progetti Web ASP.NET API di Windows Azure, e l'unico prerequisito è di aggiungere un progetto di servizio cloud per la soluzione del servizio Web. Attenersi ai passaggi riportati di seguito.

  1. Tasto destro del mouse sul nome della soluzione e selezionare Aggiungi | Nuovo progetto.
  2. Selezionare Visual c# | Cloud come il modello di progetto (Figura 12).
  3. Selezionare .NET Framework 4 nell'elenco a discesa nella parte superiore.
  4. Selezionare Windows Azure servizio Cloud Visual c#.
  5. Immettere il nome di WindowsAzureCloudService e una posizione di vostra scelta.
  6. Scegliere OK.
  7. Ora vai a Esplora soluzioni. Trovare il nuovo progetto della soluzione e tasto destro del mouse sul nodo ruoli. Selezionare Aggiungi | Progetto di ruolo Web.
  8. Trovare il progetto di servizio Web creato in precedenza. Selezionarlo e fare clic su OK.
  9. Ora dovreste vedere il progetto WebService elencato nel nodo ruoli come mostrato Figura 13.
  10. È possibile modificare diversi parametri di distribuzione per il ruolo di WebService prima della distribuzione di Windows Azure, ad esempio le dimensioni della macchina virtuale (VM) dove sta per essere ospitati e il numero di istanze che lo sostengono. Per rivedere questi parametri, tasto destro del mouse sul nodo ruoli WebService e selezionare Proprietà. Una finestra di dialogo come quella di Figura 14 viene visualizzato. Prestare particolare attenzione per il numero di istanza e i parametri di dimensione VM, che determineranno il tasso di consumo una volta il ruolo è stato distribuito. Per ulteriori informazioni su Windows Azure prezzi per istanze di calcolo, visitare bit.ly/SnLj68.
  11. Tasto destro del mouse su Windows­AzureCloudService di progetto e selezionare il pacchetto. Tenere le selezioni di default per i parametri di configurazione del servizio e costruire e fare clic sul pulsante pacchetto. Questa azione genera due file: Windows­AzureCloudService.cspkg e ServiceConfiguration, che sono necessari per creare un servizio di cloud su Windows Azure tramite il portale. Si noti che i progetti possono essere distribuiti direttamente da Visual Studio, ma non copriamo questo approccio qui.
  12. Accedi al tuo account di Windows Azure aprendo l'URL manage.windowsazure.com, quindi seguire le istruzioni a bit.ly/R15VNj per la creazione di un nuovo servizio di cloud e caricare i due file generati.
  13. A seconda del nome che si utilizza per il servizio di cloud, il nuovo ASP.NET Web API sarà disponibile presso http://{cloudservicename}.cloudapp. NET/api/valori.
  14. Scegliere l'applicazione Windows Store a questo URL e hai finito.

Adding a Cloud Service Project to the Web Service Solution
Figura 12, l'aggiunta di un progetto di servizio Cloud per la soluzione di servizio Web

Adding the WebService Project to a Cloud Service Role
Figura 13 aggiungere al progetto di servizio Web a un ruolo di servizio Cloud

Windows Azure Deployment Properties for the WebService Role
Figura 14 Windows Azure distribuzione proprietà per il ruolo di WebService

Nel Cloud

Utilizzando ASP.NET Web API, è estremamente semplice supportare applicazioni che utilizzano in modo asincrono comandi del resto per il consumo e l'ingestione di dati tramite servizi Web. Visual Studio 2012 e le librerie incluse con il .NET Framework 4.5 rendono molto semplice di emettere richieste asincrone Web contro un servizio Web. Ultimo ma non meno importante, l'integrazione dell'ambiente di sviluppo con Windows Azure consente agli sviluppatori di implementare rapidamente la parte servizi nel cloud, sfruttando la scalabilità e le capacità dell'infrastruttura nel mondo cloud fornisce.

Bruno Terkaly è un developer evangelist per Microsoft. La profondità della conoscenza deriva da anni di esperienza nel settore, la scrittura di codice utilizzando una moltitudine di piattaforme, linguaggi, quadri, SDK, librerie e le API. Passa la scrittura di codice di tempo, blogging e presentazioni dal vivo sulla creazione di applicazioni basate su cloud, in particolare utilizzando la piattaforma Windows Azure.

Ricardo Villalobos è un progettista software condito con più di 15 anni di esperienza nella progettazione e creazione di applicazioni per le aziende nel settore gestione catena di fornitura. Possesso di diverse certificazioni tecniche, nonché un Master in business administration presso l'Università di Dallas, lavora come un architetto di cloud nel gruppo di incubazione CSV di Windows Azure per Microsoft.

Grazie all'esperto tecnica seguente per la revisione di questo articolo: Robert Green