Delen via


Offline gegevenssynchronisatie toevoegen aan uw Windows-app (WPF)

Notitie

Dit product is buiten gebruik gesteld. Zie de Community Toolkit Datasync-bibliotheekvoor een vervanging voor projecten met .NET 8 of hoger.

In deze zelfstudie wordt de offlinesynchronisatiefunctie van Azure Mobile Apps voor de WPF-quickstart-app besproken. Met offlinesynchronisatie kunnen eindgebruikers communiceren met een mobiele app, zoals het weergeven, toevoegen of wijzigen van gegevens, zelfs als er geen netwerkverbinding is. Wijzigingen worden opgeslagen in een lokale database. Zodra het apparaat weer online is, worden deze wijzigingen gesynchroniseerd met de externe back-end.

Voordat u aan deze zelfstudie begint, moet u de WPF-quickstart-zelfstudiehebben voltooid, waaronder het maken van een geschikte back-endservice. We gaan er ook van uit dat u verificatie hebt toegevoegd aan uw toepassing. U kunt offlinemogelijkheden toevoegen aan uw app zonder verificatie.

De app bijwerken ter ondersteuning van offlinesynchronisatie

In onlinebewerking leest en schrijft u vanuit een IRemoteTable<T>. Wanneer u offlinesynchronisatie gebruikt, leest en schrijft u in plaats daarvan vanuit een IOfflineTable<T>. De IOfflineTable<T> wordt ondersteund door een SQLite-database op het apparaat en gesynchroniseerd met de back-enddatabase.

De benodigde NuGet-pakketten toevoegen

In Visual Studio:

  1. Klik met de rechtermuisknop op de TodoApp oplossing en selecteer vervolgens NuGet-pakketten voor oplossing beheren....

  2. Selecteer op het nieuwe tabblad Bladerenen voer Microsoft.Datasync.Client- in het zoekvak in.

    schermopname van het toevoegen van de offline NuGet in Visual Studio.

  3. Selecteer het Microsoft.Datasync.Client.SQLiteStore pakket.

  4. Selecteer in het rechterdeelvenster alle clientprojecten (behalve het TodoAppService.NET6 project).

  5. Selecteer installeren.

  6. Accepteer de gebruiksrechtovereenkomst wanneer hierom wordt gevraagd.

De externe serviceclient bijwerken

Open het TodoApp.Data project en zoek de RemoteTodoService.cs klasse (in de map Services). Werk de klasse als volgt bij:

  1. Voeg de volgende using instructie toe aan het begin van het bestand:

    using Microsoft.Datasync.Client.SQLiteStore;
    
  2. Wijzig de definitie van _table in een IOfflineTable<TodoItem>:

    /// <summary>
    /// Reference to the table used for datasync operations.
    /// </summary>
    private IOfflineTable<TodoItem> _table = null;
    
  3. Voeg een nieuwe eigenschap toe voor het opslaan van de locatie van de offlinedatabase:

    /// <summary>
    /// The path to the offline database
    /// </summary>
    public string OfflineDb { get; set; }
    
  4. Werk de methode InitializeAsync bij om de offlinedatabase te definiƫren:

    // 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. Werk de RefreshItemsAsync() bij om offlinesynchronisatie uit te voeren:

    /// <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;
    }
    

De locatie van de offlinedatabase instellen

Bewerk het App.xaml.cs bestand in het TodoApp.WPF project. Wijzig de definitie van de RemoteTodoService als volgt:

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

Als u de verificatiezelfstudie niet hebt voltooid, moet de definitie er als volgt uitzien:

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

Notitie

U kunt de offlinedatabase opslaan waar u lees-/schrijf-/maakmachtigingen hebt op een Windows-systeem. De klasse Environment.SpecialFolder biedt standaardlocaties op basis van de toepassing.

De app testen

De app wordt pas gesynchroniseerd met de back-end als het vernieuwingspictogram is ingedrukt. Testen:

  1. Open deAzure Portal.

  2. Open de resourcegroep met de resources voor de quickstart.

  3. Selecteer de quickstart-database.

  4. Selecteer de Query-editor (preview).

  5. Meld u aan met SQL Server-verificatie met dezelfde referenties die u voor de database hebt ingesteld.

    • Indien nodig wordt u gevraagd om toegang tot uw IP-adres toe te staan. Selecteer de koppeling om de acceptatielijst bij te werken en druk vervolgens op OK om de aanmelding opnieuw uit te voeren.
  6. Voer in de queryeditor SELECT * FROM [dbo].[TodoItems]in. Selecteer vervolgens uitvoeren.

Er wordt een lijst met de huidige taken weergegeven.

Schermopname van de resultaten in de S Q L-queryeditor.

Breng nu enkele wijzigingen aan via uw app. DRUK NOG NIET OP VERNIEUWEN( nog).

Herhaal de SQL-instructie in Azure Portal en controleer of er geen wijzigingen zijn aangebracht in de gegevens in de database.

Selecteer het pictogram Vernieuwen in uw app om de gegevens in de wachtrij naar de back-endservice te pushen. U ziet dat de HTTP-transacties plaatsvinden in het venster Uitvoerdebug.

Herhaal de SQL-instructie in Azure Portal en controleer of uw wijzigingen naar de externe service zijn gepusht.

Resources opschonen

Tenzij u nog een zelfstudie aan de slag gaat, kunt u de resources die zijn gekoppeld aan de back-endservice nu verwijderen.

  1. Open deAzure Portal.
  2. Selecteer de resourcegroep met de quickstart-resources.
  3. Selecteer resourcegroep verwijderen.
  4. Volg de instructies om het verwijderen te bevestigen.

U kunt ook de Azure CLI gebruiken:

az group delete -g quickstart

Als u de Azure Developer CLI hebt gebruikt om resources te implementeren, kunt u in plaats daarvan de opdracht azd down gebruiken.

Het verwijderen duurt enkele minuten.

Volgende stappen