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:
Klik met de rechtermuisknop op de
TodoApp
oplossing en selecteer vervolgens NuGet-pakketten voor oplossing beheren....Selecteer op het nieuwe tabblad Bladerenen voer Microsoft.Datasync.Client- in het zoekvak in.
Selecteer het
Microsoft.Datasync.Client.SQLiteStore
pakket.Selecteer in het rechterdeelvenster alle clientprojecten (behalve het
TodoAppService.NET6
project).Selecteer installeren.
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:
Voeg de volgende
using
instructie toe aan het begin van het bestand:using Microsoft.Datasync.Client.SQLiteStore;
Wijzig de definitie van
_table
in eenIOfflineTable<TodoItem>
:/// <summary> /// Reference to the table used for datasync operations. /// </summary> private IOfflineTable<TodoItem> _table = null;
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; }
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;
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:
Open de
Azure Portal. Open de resourcegroep met de resources voor de quickstart.
Selecteer de
quickstart
-database.Selecteer de Query-editor (preview).
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.
Voer in de queryeditor
SELECT * FROM [dbo].[TodoItems]
in. Selecteer vervolgens uitvoeren.
Er wordt een lijst met de huidige taken weergegeven.
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.
- Open de
Azure Portal. - Selecteer de resourcegroep met de quickstart-resources.
- Selecteer resourcegroep verwijderen.
- 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
- Raadpleeg de documentatie over PROCEDURES: