Přidání offline synchronizace dat do aplikace Windows (WinUI3)
Poznámka
Tento produkt je vyřazený. Náhradu za projekty používající .NET 8 nebo novější najdete v knihovně Community Toolkit Datasync.
Tento kurz popisuje funkci offline synchronizace azure Mobile Apps pro aplikaci Rychlý start pro Windows App SDK (WinUI3). Offline synchronizace umožňuje koncovým uživatelům pracovat s mobilní aplikací – prohlížením, přidáváním nebo úpravou dat – i když není k dispozici žádné síťové připojení. Změny se ukládají v místní databázi. Jakmile je zařízení zase online, tyto změny se synchronizují se vzdáleným back-endem.
Než začnete s tímto kurzem, měli byste mít dokončenýkurz rychlého startu pro
Aktualizace aplikace tak, aby podporovala offline synchronizaci
V online provozu budete číst a zapisovat z IRemoteTable<T>
. Při použití offline synchronizace se místo toho čte a zapisuje z IOfflineTable<T>
.
IOfflineTable<T>
je zajištěna databází SQLite na zařízení a je synchronizovaná s back-endovou databází.
Přidání potřebných balíčků NuGet
V sadě Visual Studio:
Klikněte pravým tlačítkem na řešení
TodoApp
a pak vyberte Spravovat balíčky NuGet pro řešení....Na nové kartě vyberte Procházeta do vyhledávacího pole zadejte Microsoft.Datasync.Client.
Vyberte balíček
Microsoft.Datasync.Client.SQLiteStore
.V pravém podokně vyberte všechny klientské projekty (s výjimkou projektu
TodoAppService.NET6
).Vyberte Nainstalovat.
Po zobrazení výzvy přijměte licenční smlouvu.
Aktualizace klienta vzdálené služby
Otevřete projekt TodoApp.Data
a vyhledejte třídu RemoteTodoService.cs
(v adresáři Services
). Aktualizujte třídu následujícím způsobem:
Na začátek souboru přidejte následující příkaz
using
:using Microsoft.Datasync.Client.SQLiteStore;
Změňte definici
_table
naIOfflineTable<TodoItem>
:/// <summary> /// Reference to the table used for datasync operations. /// </summary> private IOfflineTable<TodoItem> _table = null;
Přidejte novou vlastnost pro ukládání umístění offline databáze:
/// <summary> /// The path to the offline database /// </summary> public string OfflineDb { get; set; }
Aktualizujte metodu
InitializeAsync
tak, aby definovala offline databázi:// 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;
Aktualizujte
RefreshItemsAsync()
a proveďte offline synchronizaci:/// <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; }
Nastavení umístění offline databáze
V projektu TodoApp.WinUI
upravte soubor MainWindow.xaml.cs
. Změňte definici RemoteTodoService
následujícím způsobem:
_service = new RemoteTodoService(GetAuthenticationToken)
{
OfflineDb = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + "\\offline.db"
};
Pokud jste nedokončili kurz ověřování , měla by definice vypadat takto:
_serviceWinUI3WinUI3W = new RemoteTodoService()
{
OfflineDb = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + "\\offline.db"
};
Poznámka
Offline databázi můžete uložit všude, kde máte oprávnění ke čtení, zápisu nebo vytvoření v systému Windows. Třída Environment.SpecialFolder
poskytuje standardní umístění podle aplikace.
Otestování aplikace
Aplikace se nesynchronizuje s back-endem, dokud se nestiskne ikona aktualizace. Postup testování:
Otevřetewebu
Azure Portal. Otevřete skupinu prostředků, která obsahuje prostředky pro rychlý start.
Vyberte databázi
quickstart
.Vyberteeditoru dotazů
(Preview). Přihlaste se pomocí ověřování SQL Serveru pomocí stejných přihlašovacích údajů, které jste nastavili pro databázi.
- V případě potřeby se zobrazí výzva k povolení přístupu pro vaši IP adresu. Výběrem odkazu aktualizujte seznam povolených a stisknutím OK zkuste přihlášení zopakovat.
V editoru dotazů zadejte
SELECT * FROM [dbo].[TodoItems]
. Pak vyberte Spustit.
Zobrazí se seznam aktuálních položek TodoItems.
Teď v aplikaci udělejte nějaké změny. JEŠTĚ NESTISKEJTE TLAČÍTKO AKTUALIZOVAT (dosud).
Opakujte příkaz SQL na webu Azure Portal a ověřte, že se v datech v databázi neprovedou žádné změny.
Výběrem ikony Aktualizovat v aplikaci odešlete data do fronty do back-endové služby. Transakce HTTP se zobrazí v okně Výstupní ladění.
Opakujte příkaz SQL na webu Azure Portal a ověřte, že se změny odeslaly do vzdálené služby.
Vyčištění prostředků
Pokud neděláte další rychlý úvodní kurz, můžete teď odstranit prostředky přidružené k back-endové službě.
- Otevřetewebu
Azure Portal. - Vyberte skupinu prostředků, ve které jsou prostředky rychlého startu.
- Vyberte Odstranit skupinu prostředků.
- Odstranění potvrďte podle pokynů.
Můžete také použít Azure CLI:
az group delete -g quickstart
Pokud jste k nasazení prostředků použili Azure Developer CLI, můžete místo toho použít příkaz azd down
.
Odstranění bude trvat několik minut.
Další kroky
- Projděte si dokumentaci POSTUPY:
- ASP. Dokumentace ke službě NET6
-
klientské dokumentace k .NET