Dodawanie synchronizacji danych w trybie offline do aplikacji systemu Windows (WPF)
Nuta
Ten produkt jest wycofany. Aby zastąpić projekty przy użyciu platformy .NET 8 lub nowszej, zobacz bibliotekę datasync zestawu narzędzi Community Toolkit.
W tym samouczku omówiono funkcję synchronizacji w trybie offline aplikacji Szybki start usługi Azure Mobile Apps dla platformy WPF. Synchronizacja w trybie offline umożliwia użytkownikom końcowym interakcję z aplikacją mobilną — wyświetlanie, dodawanie lub modyfikowanie danych — nawet wtedy, gdy nie ma połączenia sieciowego. Zmiany są przechowywane w lokalnej bazie danych. Po powrocie urządzenia do trybu online te zmiany są synchronizowane ze zdalnym zapleczem.
Przed rozpoczęciem tego samouczka należy ukończyć samouczek szybki start WPF, który obejmuje tworzenie odpowiedniej usługi zaplecza. Zakładamy również, że dodano uwierzytelniania do aplikacji. Możliwości trybu offline można dodać do aplikacji bez uwierzytelniania.
Aktualizowanie aplikacji w celu obsługi synchronizacji w trybie offline
Podczas operacji online odczytujesz i zapisujesz z IRemoteTable<T>
. Podczas korzystania z synchronizacji w trybie offline odczytujesz i zapisujesz dane z IOfflineTable<T>
.
IOfflineTable<T>
jest wspierana przez bazę danych SQLite na urządzeniu i synchronizowana z bazą danych zaplecza.
Dodawanie niezbędnych pakietów NuGet
W programie Visual Studio:
Kliknij prawym przyciskiem myszy rozwiązanie
TodoApp
, a następnie wybierz pozycję Zarządzaj pakietami NuGet dla rozwiązania....Na nowej karcie wybierz pozycję Przeglądaj, a następnie wprowadź Microsoft.Datasync.Client w polu wyszukiwania.
Wybierz pakiet
Microsoft.Datasync.Client.SQLiteStore
.W okienku po prawej stronie wybierz wszystkie projekty klienckie (z wyjątkiem projektu
TodoAppService.NET6
).Wybierz pozycję Zainstaluj.
Zaakceptuj umowę licencyjną po wyświetleniu monitu.
Aktualizowanie klienta usługi zdalnej
Otwórz projekt TodoApp.Data
i znajdź klasę RemoteTodoService.cs
(w katalogu Services
). Zaktualizuj klasę w następujący sposób:
Dodaj następującą instrukcję
using
na początku pliku:using Microsoft.Datasync.Client.SQLiteStore;
Zmień definicję
_table
naIOfflineTable<TodoItem>
:/// <summary> /// Reference to the table used for datasync operations. /// </summary> private IOfflineTable<TodoItem> _table = null;
Dodaj nową właściwość do przechowywania lokalizacji bazy danych w trybie offline:
/// <summary> /// The path to the offline database /// </summary> public string OfflineDb { get; set; }
Zaktualizuj metodę
InitializeAsync
, aby zdefiniować bazę danych w trybie offline:// 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;
Zaktualizuj
RefreshItemsAsync()
, aby przeprowadzić synchronizację w trybie offline:/// <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; }
Ustawianie lokalizacji bazy danych w trybie offline
W projekcie TodoApp.WPF
edytuj plik App.xaml.cs
. Zmień definicję RemoteTodoService
w następujący sposób:
TodoService = new RemoteTodoService(async () => await GetAuthenticationToken())
{
OfflineDb = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + "\\offline.db"
};
Jeśli nie ukończono samouczka uwierzytelniania , definicja powinna wyglądać następująco:
TodoService = new RemoteTodoService()
{
OfflineDb = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + "\\offline.db"
};
Nuta
Bazę danych w trybie offline można przechowywać wszędzie tam, gdzie masz uprawnienia do odczytu/zapisu/tworzenia w systemie Windows. Klasa Environment.SpecialFolder
udostępnia standardowe lokalizacje zgodnie z aplikacją.
Testowanie aplikacji
Aplikacja nie synchronizuje się z zapleczem do momentu naciśnięcia ikony odświeżania. Aby przetestować:
Otwórz witrynę Azure Portal.
Otwórz grupę zasobów zawierającą zasoby na potrzeby przewodnika Szybki start.
Wybierz bazę danych
quickstart
.Wybierz edytor zapytań (wersja zapoznawcza).
Zaloguj się przy użyciu uwierzytelniania programu SQL Server przy użyciu tych samych poświadczeń skonfigurowanych dla bazy danych.
- W razie potrzeby zostanie wyświetlony monit o zezwolenie na dostęp do adresu IP. Wybierz link, aby zaktualizować listę dozwolonych, a następnie naciśnij przycisk OK, aby ponowić próbę zalogowania.
W edytorze zapytań wprowadź
SELECT * FROM [dbo].[TodoItems]
. Następnie wybierz pozycję Uruchom.
Zostanie wyświetlona lista bieżących zadań do wykonania.
Teraz wprowadź pewne zmiany w aplikacji. NIE NACISKAJ przycisku ODŚWIEŻ (jeszcze).
Powtórz instrukcję SQL w witrynie Azure Portal i sprawdź, czy w bazie danych nie wprowadzono żadnych zmian.
Wybierz ikonę Odśwież w aplikacji, aby wypchnąć dane w kolejce do usługi zaplecza. W oknie Debugowanie danych wyjściowych zobaczysz transakcje HTTP.
Powtórz instrukcję SQL w witrynie Azure Portal i sprawdź, czy zmiany zostały wypchnięte do usługi zdalnej.
Czyszczenie zasobów
Jeśli nie wykonujesz innego samouczka Szybkiego startu, możesz teraz usunąć zasoby skojarzone z usługą zaplecza.
- Otwórz witrynę Azure Portal.
- Wybierz grupę zasobów zawierającą zasoby szybkiego startu.
- Wybierz pozycję Usuń grupę zasobów.
- Postępuj zgodnie z instrukcjami, aby potwierdzić usunięcie.
Możesz również użyć interfejsu wiersza polecenia platformy Azure:
az group delete -g quickstart
Jeśli do wdrażania zasobów użyto interfejsu wiersza polecenia dla deweloperów platformy Azure, możesz zamiast tego użyć polecenia azd down
.
Usunięcie potrwa kilka minut.
Następne kroki
- Zapoznaj się z dokumentacją INSTRUKCJI:
- ASP. Dokumentacja usługi NET6
- dokumentacja klienta platformy .NET