Udostępnij za pośrednictwem


Dodawanie synchronizacji danych w trybie offline z aplikacją systemu Windows (WinUI3)

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 offline aplikacji Azure Mobile Apps dla zestawu SDK aplikacji systemu Windows (WinUI3) — szybki start. 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 systemu Windows (WinUI3), 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:

  1. Kliknij prawym przyciskiem myszy rozwiązanie TodoApp, a następnie wybierz pozycję Zarządzaj pakietami NuGet dla rozwiązania....

  2. Na nowej karcie wybierz pozycję Przeglądaj, a następnie wprowadź Microsoft.Datasync.Client w polu wyszukiwania.

    Zrzut ekranu przedstawiający dodawanie pakietu NuGet w trybie offline w programie Visual Studio.

  3. Wybierz pakiet Microsoft.Datasync.Client.SQLiteStore.

  4. W okienku po prawej stronie wybierz wszystkie projekty klienckie (z wyjątkiem projektu TodoAppService.NET6).

  5. Wybierz pozycję Zainstaluj.

  6. 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:

  1. Dodaj następującą instrukcję using na początku pliku:

    using Microsoft.Datasync.Client.SQLiteStore;
    
  2. Zmień definicję _table na IOfflineTable<TodoItem>:

    /// <summary>
    /// Reference to the table used for datasync operations.
    /// </summary>
    private IOfflineTable<TodoItem> _table = null;
    
  3. 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; }
    
  4. 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;
    
  5. 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.WinUI edytuj plik MainWindow.xaml.cs. Zmień definicję RemoteTodoService w następujący sposób:

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

Jeśli nie ukończono samouczka uwierzytelniania , definicja powinna wyglądać następująco:

_serviceWinUI3WinUI3W = 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ć:

  1. Otwórz witrynę Azure Portal.

  2. Otwórz grupę zasobów zawierającą zasoby na potrzeby przewodnika Szybki start.

  3. Wybierz bazę danych quickstart.

  4. Wybierz edytor zapytań (wersja zapoznawcza).

  5. 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.
  6. W edytorze zapytań wprowadź SELECT * FROM [dbo].[TodoItems]. Następnie wybierz pozycję Uruchom.

Zostanie wyświetlona lista bieżących zadań do wykonania.

Zrzut ekranu przedstawiający wyniki w edytorze zapytań S Q L.

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.

  1. Otwórz witrynę Azure Portal.
  2. Wybierz grupę zasobów zawierającą zasoby szybkiego startu.
  3. Wybierz pozycję Usuń grupę zasobów.
  4. 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