Freigeben über


Hinzufügen der Offlinedatensynchronisierung zu Ihrer Windows-App (WPF)

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 WPF-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 WPF-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:

  1. Klicken Sie mit der rechten Maustaste auf die TodoApp Lösung, und wählen Sie dann NuGet-Pakete für Lösung verwalten....

  2. Wählen Sie auf der neuen Registerkarte Durchsuchenaus, und geben Sie dann Microsoft.Datasync.Client- in das Suchfeld ein.

    Screenshot zum Hinzufügen des Offline-NuGets in Visual Studio.

  3. Wählen Sie das Microsoft.Datasync.Client.SQLiteStore Paket aus.

  4. Wählen Sie im rechten Bereich alle Clientprojekte aus (mit Ausnahme des TodoAppService.NET6 Projekts).

  5. Wählen Sie installierenaus.

  6. 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:

  1. Fügen Sie die folgende using-Anweisung am Anfang der Datei hinzu:

    using Microsoft.Datasync.Client.SQLiteStore;
    
  2. Ändern Sie die Definition von _table als IOfflineTable<TodoItem>:

    /// <summary>
    /// Reference to the table used for datasync operations.
    /// </summary>
    private IOfflineTable<TodoItem> _table = null;
    
  3. Fügen Sie eine neue Eigenschaft zum Speichern des Offlinedatenbankspeicherorts hinzu:

    /// <summary>
    /// The path to the offline database
    /// </summary>
    public string OfflineDb { get; set; }
    
  4. 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;
    
  5. 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.WPF Projekt die App.xaml.cs Datei. Ändern Sie die Definition der RemoteTodoService wie folgt:

TodoService = new RemoteTodoService(async () => await GetAuthenticationToken())
{
    OfflineDb = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + "\\offline.db"
};

Wenn Sie das Authentifizierungslernprogramm nichtabgeschlossen haben, sollte die Definition stattdessen wie folgt aussehen:

TodoService = new RemoteTodoService()
{
    OfflineDb = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + "\\offline.db"
};

Anmerkung

Sie können die Offlinedatenbank überall dort speichern, wo Sie Über Lese-/Schreib-/Erstellungsberechtigungen für ein Windows-System verfügen. Die Environment.SpecialFolder Klasse gibt Standardpositionen entsprechend der Anwendung.

Testen der App

Die App wird erst mit dem Back-End synchronisiert, wenn das Aktualisierungssymbol gedrückt wird. So testen Sie:

  1. Öffnen Sie das Azure-Portal.

  2. Öffnen Sie die Ressourcengruppe, die die Ressourcen für die Schnellstartanleitung enthält.

  3. Wählen Sie die quickstart Datenbank aus.

  4. Wählen Sie den Abfrage-Editor (Vorschau)aus.

  5. 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.
  6. Geben Sie im Abfrage-Editor SELECT * FROM [dbo].[TodoItems]ein. Wählen Sie dann Ausführenaus.

Eine Liste der aktuellen TodoItems wird angezeigt.

Screenshot der Ergebnisse im S Q L-Abfrage-Editor.

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.

  1. Öffnen Sie das Azure-Portal.
  2. Wählen Sie die Ressourcengruppe aus, die die Schnellstartressourcen enthält.
  3. Wählen Sie Ressourcengruppe löschenaus.
  4. 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