Windows Azure-Insider

Windows Azure Mobile Services: Ein robustes Back-End für Ihre Geräteanwendungen

Bruno Terkaly
Ricardo Villalobos

 

Bruno Terkaly / Ricardo VillalobosDer Softwarebereich war in den letzten Jahren durch drei wesentliche Features gekennzeichnet: Unterstützung diverser Geräte und Betriebssysteme, Anwendungen, die auf asynchronen Webdiensten basieren, die in der Regel in der Cloud gehostet werden und ein variabler Datenverkehr, der die Ressourcenplanung und -bereitstellung kompliziert. Microsoft Windows Azure Mobile Services (WAMS) vereinfacht die Implementierung von Softwarearchitekturen für diese Art der Umgebung, siehe Abbildung 1.

Typical Architecture to Support Multiple Devices with a Single Web Service
Abbildung 1: Typische Architektur zur Unterstützung mehrerer Geräte mit einem einzelnen Webdienst

Theoretisch ist es natürlich möglich, die für diesen Ansatz erforderlichen Komponenten manuell zu erstellen und bereit zu stellen. Was sich viele Entwickler aber wünschen sind Endpunkte, die die benötigen Funktionen bieten, ohne dass sie sich um die zugrunde liegende Infrastruktur kümmern müssen. Das Verwalten von strukturierten oder teilstrukturieren Speichern, Benutzerauthentifizierungen oder Pushbenachrichtigungen ist aufwendig, sodass weniger Zeit für die Entwicklung mobiler Anwendungen bleibt.

Beachten Sie, dass wir den Begriff „mobile Anwendung“ hier sehr global verwenden. Die Technologie auf der Clientseite (mobile Anwendung) kann hier auf nahezu alles ausgerichtet werden: auf ein Telefon oder Tablett-PC mit Windows Phone 8 oder Android oder auf iOS-Geräte wie iPhone oder iPad Möglich ist dies dadurch, dass WAMS auf offenen Standards und regulären HTTPS-Anforderungen basiert.

Erstellen der ersten auf WAMS basierten Anwendung

WAMS ist derzeit im Vorschaumodus und kann mit wenigen Klicks gestartet werden. Unter bit.ly/azuretestdrive können Sie sich für eine kostenlose Testversion registrieren. Melden Sie sich anschließend im Windows Azure-Portal an, und klicken Sie auf CREATE A NEW APP.

Es öffnet sich ein Fenster, in dem Sie schnell und einfach notwendige Aktionen durchführen können. Sie definieren eine URL, die von Ihrer mobilen Anwendung für die Interaktion mit den verfügbaren Diensten verwendet wird. Darüber hinaus erstellen Sie eine neue relationale Datenbank (obwohl Sie auch eine vorhanden SQL-Datenbank von Windows Azure nutzen könnten). Zur gleichen Zeit werden eine Reihe von REST-basierten Endpunkte und Diensten erstellt und für mobile Client bereitgestellt.

Als Nächstes machen Sie Angaben zu folgenden Punkten: Datenbankname, Server, Anmeldename, Kennwort und Region. Dies wird auch in Abbildung 2 gezeigt.

Specifying Database Settings
Abbildung 2: Festlegen von Datenbankeinstellungen

Sie haben nun in nur wenigen Minuten einen neuen mobilen Service in einem der zuverlässigen, sicheren und global verteilten Rechenzentren von Microsoft erstellt, siehe Abbildung 3.

The Mobile Service Account
Abbildung 3: Konto für einen mobilen Service

Klicken Sie nun auf den Dienstnamen („brunoterkaly“ in Abbildung 3), um auf das zugrunde liegende Management-Dashboard zuzugreifen.

Verwenden des Dashboards zum Erstellen einer Windows 8-Anwendung

Nachdem Sie auf das Dashboard zugegriffen haben, können Sie eine einfache Windows 8-Anwendung erstellen, die aufzeigt, wie die einzelnen Teile zusammenpassen. Beachten Sie den Link in Abbildung 4 mit der Bezeichnung „Erstellen einer neuen Windows 8-Anwendung“.

The Main Portal for Your New Mobile Service Project
Abbildung 4: Das Hauptportal für neue Projekte im Bereich mobile Services

Klicken Sie auf den Link, um den WAMS-Assistenten zu starten. Für das Erstellen einer einfachen Lösung für Windows 8-Geräte müssen Sie die folgenden drei wesentlichen Schritte durchführen:

  1. Holen Sie sich die Tools. Wenn Sie Visual Studio Express 2012 für Windows 8 noch nicht installiert haben, klicken sie auf den entsprechenden Link, und holen Sie dies nach. Installieren Sie zudem das Windows Azure Mobile Services-SDK, indem Sie die entsprechenden Daten unter bit.ly/TpWfxy herunterladen. Beachten Sie, dass die letztgenannte Komponente das Ausführen von Visual Studio 2012 auf einem Windows 8-Computer erfordert.
  2. Erstellen Sie eine relationale Tabelle für die Speicherung der Daten. Wenn Sie auf „Create TodoItem Table“ klicken, erstellt der Assistent automatisch eine Tabelle, die auf der von Ihnen zuvor angelegten oder wieder verwendeten Windows Azure SQL-Datenbank basiert.
    Windows Azure SQL-Datenbank ist ein hochskalierbarer Dienst, der Funktionen von SQL Server in der Cloud bereitstellt. Bei diesem Projekt ist es nicht notwendig, aber Sie können sich mit der neu erstellten Datenbank über Tools wie SQL Server Management Studio (Version 2008 R2) oder sogar über andere Programmiersprachen verbinden.
    Das Portal stellt überdies eine einfache Benutzeroberfläche zur Verfügung, über die Sie Ihre Daten und Tabellenstrukturen verwalten können. Windows Azure SQL-Datenbank unterstützt das herkömmliche Protokoll des tabellenförmigen Datenstroms (Tabular Data Stream, TDS). Deshalb können Sie dieselben Tools nutzen, die Sie auch bei einer lokalen SQL Server-Datenbank einsetzen würden.
    Alle Windows Azure SQL-Datenbankserver werden automatisch durch eine externe Firewall geschützt. Die entsprechenden Regeln können Sie ebenfalls über das Portal verwalten. Vergessen Sie nicht, dass es der Assistent ist, der all diese wichtigen Schritte für Sie durchführt.
  3. Erstellen und laden Sie den erforderlichen Code für Ihre Anwendung herunter. Die erforderlichen Daten und Endpunkte für dieses Projekt stehen nun bereit. Somit können wir uns jetzt dem Code widmen. Der letzte Schritt im Portal ermöglicht Ihnen, ein Visual Studio-Projekt zu erstellen, das automatisch die Vorteile der WAMS-Plattform nutzt. Gehen Sie dazu wie folgt vor:
    1. Wählen Sie als Programmiersprache entweder C# oder JavaScript.
    2. Klicken Sie auf die Schaltfläche zum Herunterladen. Es erscheint ein Dialogfeld, in dem Sie gefragt werden, ob Sie den erstellten Code öffnen oder speichern möchten. Speichern Sie die ZIP-Datei.
    3. Öffnen Sie nach dem Entzippen des Codes das Projekt in Visual Studio 2012.
    4. Führen Sie den Code aus, um zu sehen, wie dieser funktioniert. Wählen Sie im Menü „Debug“ die Option „Debuggen starten“. Geben Sie ein TodoItem ein, und wählen Sie „Speichern“. Aktualisieren Sie dann die Ansicht, wie in Abbildung 6 gezeigt.
    5. Sie können die erstellte Datenbank mit einem Tool wie SQL Server Management Studio oder dem Verwaltungstool im Portal öffnen, um die Daten zu prüfen. Sie werden feststellen, dass ein neues Todo-Element zur entsprechenden Tabelle hinzugefügt wurde.

The Database Dashboard
Abbildung 5: Das Datenbank-Dashboard

Running the Application
Abbildung 6: Ausführen der Anwendung

Der Code

Schauen wir uns das Ganze mal etwas genauer an. Der Hauptspeicherort ist MainPage.xaml.cs. Wechseln Sie zum Projektmappen-Explorer, und doppelklicken Sie auf „MainPage.xaml.cs“, um den Code aus Abbildung 7 anzuzeigen.

Abbildung 7: Die TodoItem-Klasse

19  public class TodoItem
20  {
21    public int Id { get; set; }
22  
23    [DataMember(Name = "text")]
24    public string Text { get; set; }
25
26    [DataMember(Name = "complete")]
27    public bool Complete { get; set; }
28  }
29
30  public sealed partial class MainPage : Page
31  {
32    // MobileServiceCollectionView implements ICollectionView
33    // (useful for databinding to lists) and is integrated with your
34    // MobileService to make it easy to bind your data to the ListView
35    private MobileServiceCollectionView<TodoItem> items;
36
37    private IMobileServiceTable<TodoItem> todoTable =
38      App.MobileService.GetTable<TodoItem>();
42
43    public MainPage()...
50
51    private async void InsertTodoItem(TodoItem todoItem)...
60
61    private void RefreshTodoItems()…
68
69    private async void UpdateCheckedTodoItem(TodoItem item)...
73
74    private void ButtonRefresh_Click(object sender, RoutedEventArgs e)...
79
80    private void ButtonSave_Click(object sender, RoutedEventArgs e)...
86
87    private void CheckBoxComplete_Checked(object sender, RoutedEventArgs e)...
88
89    protected override void OnNavigatedTo(NavigationEventArgs e)...
91  }
=

Folgendes passiert im Code:

  • Die Zeilen 19 bis 28 erstellen das TodoItem-Objekt. Dieses Objekt stellt die Daten dar, die wir in der Windows Azure SQL-Datenbank speichern möchten. Es repräsentiert dieselbe Datenstruktur wie die zugrunde liegende Tabelle in der Datenbank. Diese müssen aber nicht identisch sein. Die DataMember-Attribute bestimmen, wie das Element serialisiert wird und legen den Namen der tatsächlichen Spalten in der Windows Azure SQL-Datenbank fest. Dadurch kann sich der Spaltenname in der Datenbank vom Eigenschaftsnamen in Microsoft .NET Framework unterscheiden.
  • In Zeile 35 wird eine Auflistung von Elementen erstellt, die in einem Listensteuerelement auf der Hauptseite der Anwendung angezeigt werden. Die Auflistung ist an das zugrunde liegende Listensteuerelement gebunden. Es wird über das Objekt aus Zeile 37 gefüllt.
  • In Zeile 37 wird eine IMobileServiceTable von TodoItems namens Todo-Tabelle erstellt. Das todoTable-Objekt agiert als Wrapper für die RESTful HTTP-API, die von WAMS bereitgestellt wird und ermöglicht die Verwendung von clientseitigen LINQ-Abfragen anstelle von manuellen REST API HTTP-Aufrufen zum Abfragen von Daten in der TodoItem-Tabelle der Windows Azure SQL-Datenbank. Das Ergebnis der LINQ-Abfragen wird in der zuvor erstellten Elementauflistung gespeichert und später zwecks Anzeige an das ListView-Steuerelement gebunden. Dasselbe todoTable-Objekt ermöglicht ein asynchrones Einfügen, Aktualisieren und Löschen von Operationen in der TodoItem-Tabelle der Windows Azure SQL-Datenbank. Dieser gesamte Code müsste eigentlich von Ihnen selbst geschrieben werden. Dem Entwickler bleibt es aber erspart, all diesen Grundlagencode zum Ausführen typischer Aktionen wie Erstellen, Lesen, Aktualisieren oder Löschen zu generieren.
  • Zeile 51 fügt Todo-Elemente asynchron in die Tabelle ein und aktualisiert die Elementauflistung.
  • Zeile 61 aktualisiert die Elementauflistung mit den neuesten Daten aus der Todo-Tabelle und bindet die Daten an das Listensteuerelement.
  • Zeile 69 gibt asynchrone Aktualisierungen der zugrunde liegenden SQL-Datenbanktabelle heraus und entfernt das Element aus der Elementauflistung.
  • Zeile 74 aktualisiert das Listensteuerelement mit Daten aus der Datenbank.
  • Zeile 80 fügt einen neuen Eintrag zur Todo-Tabelle hinzu.
  • Zeile 87 aktualisiert die zugrunde liegende Tabelle, um wiederzugeben, dass ein Kontrollkästchen aktiviert wurde.

Sie sollten sich auch die Datei „App.xaml.cs“ genauer ansehen, da in dieser der Startcode gespeichert wird. Das Clientobjekt vom Typ MobileServiceClient abstrahiert die Komplexität der Durchführung eines RESTful-Dienstaufrufs, der einen Anwendungsschlüssel erfordert. Dieser wird generiert, wenn der mobile Service von Windows Azure erstellt wird. Sie erhalten den Anwendungsschlüssel entweder über das Windows Azure Mobile Services-Portal oder die Datei „App.xaml.cs“.

 

sealed partial class App : Application
  {
    // This MobileServiceClient has been configured to
    // communicate with your Mobile Service URL and
    // application key; you're all set to start working with
    // your Mobile Service!
    public static MobileServiceClient MobileService =
      new MobileServiceClient(
      "https://brunoterkaly.azure-mobile.net/",
      "rsECynSsGJmPiHmydyTGEYOSlrbCgr27"
);

Ausführen von Anforderungen

Jetzt wird es interessant. Sie können die vom Windows 8-Client erstellten HTTP-Anforderungen mit einem Web Debugging Proxy-Tool wie Fiddler analysieren. Das Tool erhalten Sie kostenlos unter fiddler2.com. Ehe Sie Fiddler für diesen Zweck einsetzen können, müssen Sie dem Tool das Erfassen und Entschlüsseln des HTTP-Verkehrs erlauben. Wechseln Sie dazu in Fiddler zu „Tools | Fiddler Options“, navigieren Sie dann zum Tab „HTTPS“, und aktivieren Sie anschließend das Kontrollkästchen „Capture HTTPS CONNECTs“ und „Decrypt HTTPS traffic“.

Analyzing the Generated HTTP Requests Using Fiddler
Abbildung 8: Analyse der erstellten HTTP-Anforderungen mit Fiddler

The JSON Code Returned from WAMS
Abbildung 9: Der von WAMS zurückgegebene JSON-Code

Wechseln Sie nach dem Starten des Tools zur Registerkarte „Composer“, und führen Sie die in Abbildung 8 und Abbildung 9 gezeigten Schritte aus:

  1. Wählen Sie das Verb, beispielsweise GET, und geben Sie die URL (für Ihr Projekt lautet diese https://brunoterkaly.azure-­mobile.net/tables/TodoItem) und den entsprechenden Header (beispielsweise https://brunoterkaly.azure-mobile.net/tables/TodoItem) ein.
  2. Wählen Sie „Execute“.
  3. Klicken Sie auf die Sitzung im rechten Fensterbereich.
  4. Wählen Sie „Inspect in New Window“.
  5. Das Fenster für die Websitzung wird angezeigt. Wählen Sie die Registerkarte „Response“.
  6. Klicken Sie auf die Registerkarte „JSON“. Sie können nun die Daten sehen, die aus dem zuvor erstellten mobilen Service von Windows Azure stammen. Es handelt sich hierbei um dieselben Daten, die Sie auch in der SQL Server-Datenbank gesehen haben.

Das bedeutet im Wesentlichen, dass über nahezu jede Umgebung auf einen mobilen Service von Windows Azure zugegriffen werden kann, da HTTP-Anforderungen und RESTful-Aufrufe von vielen Plattformen und Programmiersprachen unterstützt werden. Durch das Windows Azure Mobile Services-SDK für Windows 8 wird die Verwendung in Windows 8-Apps vereinfacht. Darüber hinaus stehen auch bald Clientbibliotheken für iOS und Android zur Verfügung.

Zusammenfassung

Windows Azure Mobile Services vereinfacht das Leben von Entwicklern mobiler Geräteanwendungen durch die automatische Erstellung eines Back-Ends um einiges. Dieses basiert auf offenen Standards und unterstützt mehrere Gerätetypen und Betriebssysteme. WAMS bietet zudem eine verlässliche und sichere Infrastruktur in der Cloud, die an den Datenverkehr und Bedarf angepasst werden kann, sodass sich Programmierer auf die Optimierung Ihrer Apps und Daten konzentrieren können.

Natürlich gibt es noch sehr viel mehr zu lernen, insbesondere im Hinblick auf Pushbenachrichtigung und Authentifizierung. Durch Pushbenachrichtigungen können Benachrichtigungen einfach an Ihre Windows 8-App gesendet werden, ohne dass der Infrastrukturcode des Back-Ends geschrieben, getestet oder verwaltet werden muss. Zudem ist es durch WAMS nicht mehr nötig, benutzerdefinierte Lösungen zur Authentifizierung und Benutzerverwaltung für Ihre Windows 8-Apps zu schreiben, zu konfigurieren oder zu testen. Wir werden uns diesen Techniken in zukünftigen Kolumnen widmen.      

 

 

Bruno Terkaly* *arbeitet als Entwicklungsexperte für Microsoft. Seine fundierten Kenntnisse basieren auf mehreren Jahren Erfahrung in der Programmierung in unterschiedlichsten Plattformen, Sprachen, Frameworks, SDKs, Bibliotheken und APIs. Er schreibt Code, Blogs und referiert live über die Erstellung von cloudbasierten Anwendungen, insbesondere mit der Windows Azure-Plattform und hat gerade eine fünfteilige Serie über iOS und Windows Azure Mobile Services verfasst. Sie finden diese unter bit.ly/UPXGdV.

Der erfahrene Softwarearchitekt Ricardo Villalobos  erstellt seit über 15 Jahren Anwendungen für Unternehmen in der Supply-Chain-Management-Branche. Er besitzt verschiedene Microsoft-Zertifizierungen sowie einen Master-Abschluss in Businessadministration der University of Dallas. Er arbeitet als Cloudarchitekt in der Windows Azure CSV-Inkubationsgruppe für Microsoft.

Unser Dankgilt dem folgenden technischen Experten für die Durchsicht dieses Artikels:Bret Stateham