Lägga till datasynkronisering offline i din Windows-app (WPF)
Not
Den här produkten har dragits tillbaka. En ersättning för projekt som använder .NET 8 eller senare finns i Community Toolkit Datasync-biblioteket.
Den här självstudien beskriver funktionen för offlinesynkronisering i Azure Mobile Apps för WPF-snabbstartsappen. Med offlinesynkronisering kan slutanvändarna interagera med en mobilapp – visa, lägga till eller ändra data – även om det inte finns någon nätverksanslutning. Ändringar lagras i en lokal databas. När enheten är online igen synkroniseras dessa ändringar med fjärrserverdelen.
Innan du påbörjar den här självstudien bör du ha slutfört WPF-snabbstartsguiden, vilket innefattar att skapa en lämplig serverdelstjänst. Vi antar också att du har lagt till autentisering i ditt program. Du kan lägga till offlinefunktioner i din app utan autentisering.
Uppdatera appen för att stödja offlinesynkronisering
I onlineåtgärden läser du till och skriver från en IRemoteTable<T>
. När du använder offlinesynkronisering läser du till och skriver från en IOfflineTable<T>
i stället.
IOfflineTable<T>
backas upp av en SQLite-databas på enheten och synkroniseras med serverdelsdatabasen.
Lägg till nödvändiga NuGet-paket
I Visual Studio:
Högerklicka på den
TodoApp
lösningen och välj sedan Hantera NuGet-paket för lösning....På den nya fliken väljer du Bläddraoch anger sedan Microsoft.Datasync.Client i sökrutan.
Välj det
Microsoft.Datasync.Client.SQLiteStore
paketet.I den högra rutan väljer du alla klientprojekt (förutom det
TodoAppService.NET6
projektet).Välj Installera.
Godkänn licensavtalet när du uppmanas att göra det.
Uppdatera fjärrtjänstklienten
Öppna TodoApp.Data
-projektet och leta upp klassen RemoteTodoService.cs
(i katalogen Services
). Uppdatera klassen enligt följande:
Lägg till följande
using
-instruktion överst i filen:using Microsoft.Datasync.Client.SQLiteStore;
Ändra definitionen av
_table
till enIOfflineTable<TodoItem>
:/// <summary> /// Reference to the table used for datasync operations. /// </summary> private IOfflineTable<TodoItem> _table = null;
Lägg till en ny egenskap för lagring av offlinedatabasplatsen:
/// <summary> /// The path to the offline database /// </summary> public string OfflineDb { get; set; }
Uppdatera metoden
InitializeAsync
för att definiera offlinedatabasen:// 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;
Uppdatera
RefreshItemsAsync()
för att utföra offlinesynkronisering:/// <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; }
Ange platsen för offlinedatabasen
I TodoApp.WPF
-projektet redigerar du filen App.xaml.cs
. Ändra definitionen av RemoteTodoService
enligt följande:
TodoService = new RemoteTodoService(async () => await GetAuthenticationToken())
{
OfflineDb = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + "\\offline.db"
};
Om du inte har slutfört självstudien om autentiseringbör definitionen se ut så här i stället:
TodoService = new RemoteTodoService()
{
OfflineDb = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + "\\offline.db"
};
Not
Du kan lagra offlinedatabasen oavsett var du har läs-/skriv-/skapa-behörigheter i ett Windows-system. Klassen Environment.SpecialFolder
ger standardplatser enligt programmet.
Testa appen
Appen synkroniseras inte med serverdelen förrän uppdateringsikonen trycks ner. Så här testar du:
Öppna Azure-portalen.
Öppna den resursgrupp som innehåller resurserna för snabbstarten.
Välj den
quickstart
databasen.Välj Frågeredigeraren (förhandsversion).
Logga in med SQL Server-autentisering med samma autentiseringsuppgifter som du har konfigurerat för databasen.
- Om det behövs uppmanas du att tillåta åtkomst för din IP-adress. Välj länken för att uppdatera listan över tillåtna och tryck sedan på OK för att försöka logga in igen.
I frågeredigeraren anger du
SELECT * FROM [dbo].[TodoItems]
. Välj sedan Kör.
En lista över aktuella TodoItems visas.
Gör nu några ändringar via din app. TRYCK INTE PÅ UPPDATERA (ännu).
Upprepa SQL-instruktionen i Azure-portalen och kontrollera att inga ändringar har gjorts i data i databasen.
Välj ikonen Uppdatera i appen för att skicka data i kön till serverdelstjänsten. Http-transaktionerna visas i fönstret Utdatafelsökning.
Upprepa SQL-instruktionen i Azure-portalen och kontrollera att ändringarna har överförts till fjärrtjänsten.
Rensa resurser
Om du inte gör en ny snabbstartsguide kan du ta bort de resurser som är associerade med serverdelstjänsten nu.
- Öppna Azure-portalen.
- Välj den resursgrupp som innehåller snabbstartsresurserna.
- Välj Ta bort resursgrupp.
- Följ anvisningarna för att bekräfta borttagningen.
Du kan också använda Azure CLI:
az group delete -g quickstart
Om du använde Azure Developer CLI för att distribuera resurser kan du använda kommandot azd down
i stället.
Borttagningen tar några minuter att slutföra.
Nästa steg
- Läs dokumentationen om HUR DU GÖR: