Hinzufügen der Offlinedatensynchronisierung zu Ihrer Windows-App (UWP)
Anmerkung
Dieses Produkt wird eingestellt. Eine Ersetzung für Projekte mit .NET 8 oder höher finden Sie in der Community Toolkit Datasync-Bibliothek.
In diesem Lernprogramm wird die Offlinesynchronisierungsfunktion von Azure Mobile Apps für die UWP-Schnellstart-App behandelt. Die Offlinesynchronisierung ermöglicht Endbenutzern die Interaktion mit einer mobilen App – Anzeigen, Hinzufügen oder Ändern von Daten – auch wenn keine Netzwerkverbindung vorhanden ist. Änderungen werden in einer lokalen Datenbank gespeichert. Sobald das Gerät wieder online ist, werden diese Änderungen mit dem Remote-Back-End synchronisiert.
Bevor Sie dieses Lernprogramm starten, sollten Sie das UWP-Schnellstart-Lernprogrammabgeschlossen haben, das das Erstellen eines geeigneten Back-End-Diensts umfasst. Wir gehen auch davon aus, dass Sie ihrer Anwendung Authentifizierung hinzugefügt haben. Sie können Ihrer App Offlinefunktionen ohne Authentifizierung hinzufügen.
Aktualisieren der App zur Unterstützung der Offlinesynchronisierung
Im Onlinevorgang lesen und schreiben Sie aus einem IRemoteTable<T>
. Bei Verwendung der Offlinesynchronisierung lesen und schreiben Sie stattdessen aus einem IOfflineTable<T>
. Die IOfflineTable<T>
wird von einer SQLite-Datenbank auf einem Gerät unterstützt und mit der Back-End-Datenbank synchronisiert.
Hinzufügen der erforderlichen NuGet-Pakete
In Visual Studio:
Klicken Sie mit der rechten Maustaste auf die
TodoApp
Lösung, und wählen Sie dann NuGet-Pakete für Lösung verwalten....Wählen Sie auf der neuen Registerkarte Durchsuchenaus, und geben Sie dann Microsoft.Datasync.Client- in das Suchfeld ein.
Wählen Sie das
Microsoft.Datasync.Client.SQLiteStore
Paket aus.Wählen Sie im rechten Bereich alle Clientprojekte aus (mit Ausnahme des
TodoAppService.NET6
Projekts).Wählen Sie installierenaus.
Akzeptieren Sie den Lizenzvertrag, wenn Sie dazu aufgefordert werden.
Aktualisieren des Remotedienstclients
Öffnen Sie das TodoApp.Data
Projekt, und suchen Sie die RemoteTodoService.cs
Klasse (im verzeichnis Services
). Aktualisieren Sie die Klasse wie folgt:
Fügen Sie die folgende
using
-Anweisung am Anfang der Datei hinzu:using Microsoft.Datasync.Client.SQLiteStore;
Ändern Sie die Definition von
_table
alsIOfflineTable<TodoItem>
:/// <summary> /// Reference to the table used for datasync operations. /// </summary> private IOfflineTable<TodoItem> _table = null;
Fügen Sie eine neue Eigenschaft zum Speichern des Offlinedatenbankspeicherorts hinzu:
/// <summary> /// The path to the offline database /// </summary> public string OfflineDb { get; set; }
Aktualisieren Sie die
InitializeAsync
-Methode, um die Offlinedatenbank zu definieren:// Create the offline store definition var connectionString = new UriBuilder { Scheme = "file", Path = OfflineDb, Query = "?mode=rwc" }.Uri.ToString(); var store = new OfflineSQLiteStore(connectionString); store.DefineTable<TodoItem>(); var options = new DatasyncClientOptions { OfflineStore = store, HttpPipeline = new HttpMessageHandler[] { new LoggingHandler() } }; // Create the datasync client. _client = TokenRequestor == null ? new DatasyncClient(Constants.ServiceUri, options) : new DatasyncClient(Constants.ServiceUri, new GenericAuthenticationProvider(TokenRequestor), options); // Initialize the database await _client.InitializeOfflineStoreAsync(); // Get a reference to the offline table. _table = _client.GetOfflineTable<TodoItem>(); // Set _initialized to true to prevent duplication of locking. _initialized = true;
Aktualisieren Sie die
RefreshItemsAsync()
, um die Offlinesynchronisierung durchzuführen:/// <summary> /// Refreshes the TodoItems list manually. /// </summary> /// <returns>A task that completes when the refresh is done.</returns> public async Task RefreshItemsAsync() { await InitializeAsync(); // First, push all the items in the table. await _table.PushItemsAsync(); // Then, pull all the items in the table. await _table.PullItemsAsync(); return; }
Festlegen des Offlinedatenbankspeicherorts
Bearbeiten Sie im TodoApp.UWP
Projekt die App.xaml.cs
Datei. Ändern Sie die Definition der RemoteTodoService
wie folgt:
TodoService = new RemoteTodoService(GetAuthenticationToken)
{
OfflineDb = ApplicationData.Current.LocalCacheFolder.Path + "\\offline.db"
};
Wenn Sie das Authentifizierungslernprogramm nichtabgeschlossen haben, sollte die Definition stattdessen wie folgt aussehen:
TodoService = new RemoteTodoService()
{
OfflineDb = ApplicationData.Current.LocalCacheFolder.Path + "\\offline.db"
};
Möglicherweise müssen Sie Folgendes am Anfang der Datei hinzufügen, wenn ApplicationData
nicht erkannt wird:
using Windows.Storage;
Anmerkung
Die universelle Windows-Plattform schränkt ein, wo Sie Daten lesen und schreiben können. Sie können jeden der Speicherordner in ApplicationData.Current
verwenden. Wenn Sie sicherstellen möchten, dass die Daten verfügbar, aber nicht in der Cloud gesichert sind, verwenden Sie LocalCacheFolder
.
Testen der App
Die App wird erst mit dem Back-End synchronisiert, wenn das Aktualisierungssymbol gedrückt wird. So testen Sie:
Öffnen Sie das Azure-Portal.
Öffnen Sie die Ressourcengruppe, die die Ressourcen für die Schnellstartanleitung enthält.
Wählen Sie die
quickstart
Datenbank aus.Wählen Sie den Abfrage-Editor (Vorschau)aus.
Melden Sie sich mit der SQL Server-Authentifizierung mit denselben Anmeldeinformationen an, die Sie für die Datenbank eingerichtet haben.
- Bei Bedarf werden Sie aufgefordert, den Zugriff auf Ihre IP-Adresse zuzulassen. Wählen Sie den Link aus, um die Zulassungsliste zu aktualisieren, und drücken Sie dann OK, um die Anmeldung erneut zu versuchen.
Geben Sie im Abfrage-Editor
SELECT * FROM [dbo].[TodoItems]
ein. Wählen Sie dann Ausführenaus.
Eine Liste der aktuellen TodoItems wird angezeigt.
Nehmen Sie nun einige Änderungen über Ihre App vor. NICHT AKTUALISIEREN (noch) drücken.
Wiederholen Sie die SQL-Anweisung im Azure-Portal, und stellen Sie sicher, dass an den Daten in der Datenbank keine Änderungen vorgenommen wurden.
Wählen Sie in Ihrer App das Symbol Aktualisieren aus, um die Daten in der Warteschlange an den Back-End-Dienst zu übertragen. Im Ausgabedebugfenster werden die HTTP-Transaktionen angezeigt.
Wiederholen Sie die SQL-Anweisung im Azure-Portal, und stellen Sie sicher, dass Ihre Änderungen an den Remotedienst übertragen wurden.
Bereinigen von Ressourcen
Wenn Sie kein weiteres Schnellstart-Lernprogramm ausführen, können Sie die ressourcen löschen, die dem Back-End-Dienst zugeordnet sind.
- Öffnen Sie das Azure-Portal.
- Wählen Sie die Ressourcengruppe aus, die die Schnellstartressourcen enthält.
- Wählen Sie Ressourcengruppe löschenaus.
- Folgen Sie den Anweisungen, um den Löschvorgang zu bestätigen.
Sie können auch die Azure CLI verwenden:
az group delete -g quickstart
Wenn Sie die Azure Developer CLI zum Bereitstellen von Ressourcen verwendet haben, können Sie stattdessen den Befehl azd down
verwenden.
Der Löschvorgang dauert einige Minuten.
Nächste Schritte
- Lesen Sie die DOKUMENTATION ZUR VORGEHENSWEISE: