Aktivieren der Offlinesynchronisierung für Ihre Windows-App
Übersicht
In diesem Tutorial wird das Hinzufügen der Offlineunterstützung zu einer App für die universelle Windows-Plattform (UWP) mithilfe eines Azure Mobile App-Back-Ends erläutert. Die Offlinesynchronisierung ermöglicht Endbenutzern die Interaktion mit einer mobilen App (Anzeigen, Hinzufügen und Ändern von Daten) auch ohne Netzwerkverbindung. Änderungen werden in einer lokalen Datenbank gespeichert. Sobald das Gerät wieder online ist, werden diese Änderungen mit dem Remote-Back-End synchronisiert.
In diesem Tutorial aktualisieren Sie das UWP-App-Projekt aus dem Tutorial Erstellen einer Windows-App, damit die Offlinefunktionen von Azure Mobile Apps unterstützt werden. Wenn Sie das heruntergeladene Schnellstart-Serverprojekt nicht verwenden, müssen Sie Ihrem Projekt die Datenzugriffs-Erweiterungspakete hinzufügen. Weitere Informationen zu Servererweiterungspaketen finden Sie unter Work with the .NET backend server SDK for Azure Mobile Apps(in englischer Sprache).
Weitere Informationen zur Offlinesynchronisierungsfunktion finden Sie im Thema Offlinedatensynchronisierung in Azure Mobile Apps.
Requirements (Anforderungen)
Für dieses Tutorial gelten die folgenden Voraussetzungen:
- Visual Studio 2013 unter Windows 8.1 oder höher.
- Abschluss der Erstellung einer Windows-App.
- Azure Mobile Services SQLite Store
- SQLite for Universal Windows Platform Development
Aktualisieren der Client-App für die Unterstützung von Offlinefunktionen
Offlinefunktionen der mobilen Azure-App ermöglichen Ihnen die Interaktion mit einer lokalen Datenbank, wenn Sie sich in einem Offlineszenario befinden. Um diese Funktionen in der App zu verwenden, initialisieren Sie einen SyncContext in einem lokalen Speicher. Verweisen Sie dann über die IMobileServiceSyncTable-Schnittstelle auf Ihre Tabelle. Als lokaler Speicher auf dem Gerät wird SQLite verwendet.
Installieren Sie die SQLite-Laufzeit für die Universelle Windows-Plattform.
Öffnen Sie in Visual Studio den NuGet-Paket-Manager für das UWP-App-Projekt, das Sie im Tutorial Erstellen einer Windows-App abgeschlossen haben. Suchen und installieren Sie das NuGet-Paket Microsoft.Azure.Mobile.Client.SQLiteStore.
Klicken Sie in Projektmappen-Explorer mit der rechten Maustaste auf Verweise>hinzufügen...>Universelle Windows>Erweiterungen aktivieren sie dann sowohl SQLite für Universelle Windows-Plattform als auch Visual C++ 2015-Runtime für Universelle Windows-Plattform-Apps.
Öffnen Sie die Datei „MainPage.xaml.cs“, und heben Sie die Auskommentierung der Definition
#define OFFLINE_SYNC_ENABLED
auf.Drücken Sie in Visual Studio die Taste F5 , um die Client-App erneut zu erstellen und auszuführen. Die App funktioniert genauso wie vor dem Aktivieren der Offlinesynchronisierung. Allerdings wird die lokale Datenbank jetzt mit Daten aufgefüllt, die in einem Offlineszenario verwendet werden können.
Aktualisieren der App zur Trennung der Verbindung mit dem Back-End
In diesem Abschnitt trennen Sie die Verbindung mit Ihrem Mobile App-Back-End, um ein Offlineszenario zu simulieren. Wenn Sie Datenelemente hinzufügen, teilt Ihnen der Ausnahmehandler mit, dass sich die App im Offlinemodus befindet. In diesem Zustand werden neue Elemente im lokalen Speicher hinzugefügt. Sie werden mit dem Back-End für die mobile App synchronisiert, sobald nach dem Wiederherstellen der Verbindung der nächste Push ausgeführt wird.
Bearbeiten Sie "App.xaml.cs" im freigegebenen Projekt. Kommentieren Sie die Initialisierung von MobileServiceClient aus, und fügen Sie die folgende Zeile hinzu, in der eine ungültige mobile App-URL verwendet wird:
public static MobileServiceClient MobileService = new MobileServiceClient("https://your-service.azurewebsites.fail");
Sie können auch Offlineverhalten demonstrieren, indem Sie WLAN und Mobilfunknetze auf dem Gerät deaktivieren oder den Flugzeugmodus verwenden.
Drücken Sie F5 , um die Anwendung zu erstellen und auszuführen. Beachten Sie, dass die Synchronisierung bei der Aktualisierung fehlgeschlagen ist, als die App gestartet wurde.
Geben Sie neue Elemente ein. Beachten Sie, dass der Pushvorgang bei jedem Klick auf Speichern mit dem Status CancelledByNetworkError fehlschlägt. Die neuen Todo-Elemente sind jedoch im lokalen Speicher vorhanden und bleiben dort, bis sie per Push zum Back-End für die mobile App übertragen werden können. Wenn Sie in einer Produktions-App diese Ausnahmen unterdrücken, verhält sich die Client-App, als ob sie immer noch mit dem Back-End für die mobile App verbunden wäre.
Schließen Sie die App und starten Sie sie erneut, um zu überprüfen, ob die neuen Elemente dauerhaft im lokalen Speicher gespeichert wurden.
(Optional:) Öffnen Sie den Server-Explorerin Visual Studio. Navigieren Sie zu Ihrer Datenbank in Azure-SQL-Datenbanken>. Klicken Sie mit der rechten Maustaste auf Ihre Datenbank, und wählen Sie In SQL Server-Objekt-Explorer öffnenaus. Jetzt können nach Ihrer SQL-Datenbanktabelle und seinen Inhalten suchen. Stellen Sie sicher, dass die Daten in der Back-End-Datenbank nicht geändert wurden.
(Optional) Verwenden Sie ein REST-Tool wie Fiddler oder Postman, um Ihr mobiles Back-End mit einer GET-Abfrage in Form von
https://<your-mobile-app-backend-name>.azurewebsites.net/tables/TodoItem
abzufragen.
Aktualisieren der App zum erneuten Verbinden des mobilen App-Back-Ends
In diesem Abschnitt verbinden Sie die App erneut mit dem mobilen App-Back-End. Diese Änderungen simulieren eine erneute Herstellung der Netzwerkverbindung für die App.
Beim ersten Ausführen der Anwendung ruft der OnNavigatedTo
-Ereignishandler InitLocalStoreAsync
auf. Mit dieser Methode wird wiederum SyncAsync
aufgerufen, um den lokalen Speicher mit der Back-End-Datenbank zu synchronisieren. Die App versucht, die Synchronisierung beim Starten durchzuführen.
Öffnen Sie „App.xaml.cs“ im freigegebenen Projekt, und heben Sie die Auskommentierung der vorherigen Initialisierung von
MobileServiceClient
auf, um die korrekte URL für die mobile App zu verwenden.Drücken Sie die Taste F5 , um die App erneut zu erstellen und auszuführen. Die App synchronisiert die lokalen Änderungen mit dem Azure Mobile App-Back-End mithilfe von Push- und Pullvorgängen, wenn der
OnNavigatedTo
-Ereignishandler ausgeführt wird.(Optional) Zeigen Sie die aktualisierten Daten mithilfe von SQL Server-Objekt-Explorer oder einem REST-Tool wie Fiddler an. Beachten Sie, dass die Daten zwischen der Azure Mobile App-Back-End-Datenbank und dem lokalen Speicher synchronisiert wurden.
Klicken Sie in der App auf das Kontrollkästchen neben einigen Elementen, um sie im lokalen Speicher abzuschließen.
UpdateCheckedTodoItem
ruftSyncAsync
auf, um jedes abgeschlossene Element mit dem Mobile App-Back-End zu synchronisieren.SyncAsync
ruft sowohl Push- als auch Pullvorgänge auf. Bei jeder Ausführung eines Pullvorgangs für eine Tabelle, die der Client geändert hat, wird aber immer automatisch ein Pushvorgang ausgeführt. Durch dieses Verhalten wird sichergestellt, dass alle Tabellen im lokalen Speicher und die Beziehungen konsistent bleiben. Dieses Verhalten kann zu einem unerwarteten Pushvorgang führen. Weitere Informationen zu diesem Verhalten finden Sie unter Offlinedatensynchronisierung in Azure Mobile Apps.
API-Zusammenfassung
Zur Unterstützung der Offlinefunktionen mobiler Dienste haben Sie die Schnittstelle IMobileServiceSyncTable verwendet und MobileServiceClient.SyncContext mit einer lokalen SQLite-Datenbank initialisiert. In einer Offlinesituation funktionieren die normalen CRUD-Operationen für Mobile Apps so, als ob die App immer noch verbunden wäre. Alle Operationen werden jedoch nur im lokalen Speicher ausgeführt. Zur Synchronisierung des lokalen Speichers mit dem Server werden die folgenden Methoden verwendet:
- PushAsync Da diese Methode IMobileServicesSyncContext angehört, werden Änderungen an allen Tabellen per Pushvorgang an das Back-End übertragen. Nur Datensätze mit lokalen Änderungen werden an den Server gesendet.
- PullAsync Ein Pullvorgang wird von einem IMobileServiceSyncTable-Element aus gestartet. Wenn verfolgte Änderungen in der Tabelle vorhanden sind, wird ein impliziter Pushvorgang ausgeführt, um sicherzustellen, dass alle Tabellen im lokalen Speicher gemeinsam mit den Beziehungen konsistent bleiben. Der pushOtherTables -Parameter steuert, ob bei einem impliziten Pushvorgang auch andere Tabellen per Push übertragen werden. Der Abfrageparameter verwendet eine IMobileServiceTableQuery<T> - oder OData-Abfragezeichenfolge, um die zurückgegebenen Daten zu filtern. Der queryId -Parameter dient zum Definieren der inkrementellen Synchronisierung. Weitere Informationen finden Sie unter Synchronisierung von Offlinedaten in Azure Mobile Apps.
- PurgeAsync Ihre App sollte diese Methode in regelmäßigen Abständen aufrufen, um veraltete Daten endgültig aus dem lokalen Speicher zu löschen. Verwenden Sie den force -Parameter, wenn Sie noch nicht synchronisierte Änderungen löschen müssen.
Weitere Informationen zu diesen Konzepten finden Sie unter Synchronisierung von Offlinedaten in Azure Mobile Apps.
Weitere Informationen
In den folgenden Themen finden Sie weitere Hintergrundinformationen zum Offlinesynchronisierungsfeature von Mobile Apps: