Włączanie synchronizacji w trybie offline dla aplikacji systemu Windows

Omówienie

W tym samouczku pokazano, jak dodać obsługę trybu offline do aplikacji platformy platforma uniwersalna systemu Windows (UWP) przy użyciu zaplecza aplikacji mobilnej platformy Azure. Synchronizacja w trybie offline umożliwia użytkownikom końcowym interakcję z aplikacjami mobilnymi — 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.

W tym samouczku zaktualizujesz projekt aplikacji platformy UWP z samouczka Tworzenie aplikacji systemu Windows w celu obsługi funkcji trybu offline usługi Azure Mobile Apps. Jeśli nie używasz pobranego projektu serwera szybkiego startu, musisz dodać pakiety rozszerzeń dostępu do danych do projektu. Aby uzyskać więcej informacji na temat pakietów rozszerzeń serwera, zobacz Praca z zestawem SDK serwera zaplecza platformy .NET dla usługi Azure Mobile Apps.

Aby dowiedzieć się więcej na temat funkcji synchronizacji offline, zobacz temat Offline Data Sync in Azure Mobile Apps (Synchronizacja danych offline w usłudze Azure Mobile Apps).

Wymagania

Ten samouczek wymaga następujących wymagań wstępnych:

Aktualizowanie aplikacji klienckiej w celu obsługi funkcji w trybie offline

Funkcje trybu offline aplikacji mobilnej platformy Azure umożliwiają interakcję z lokalną bazą danych w scenariuszu offline. Aby użyć tych funkcji w aplikacji, należy zainicjować element SyncContext do magazynu lokalnego. Następnie odwołaj się do tabeli za pośrednictwem interfejsu IMobileServiceSyncTable . SqLite jest używany jako magazyn lokalny na urządzeniu.

  1. Zainstaluj środowisko uruchomieniowe SQLite dla platforma uniwersalna systemu Windows.

  2. W programie Visual Studio otwórz menedżera pakietów NuGet dla projektu aplikacji platformy UWP ukończonego w samouczku Tworzenie aplikacji systemu Windows . Wyszukaj i zainstaluj pakiet NuGet Microsoft.Azure.Mobile.Client.SQLiteStore .

  3. W Eksplorator rozwiązań kliknij prawym przyciskiem myszy pozycję Odwołania>Dodaj odwołanie...>Uniwersalny system Windows>Rozszerzenia, a następnie włącz zarówno sqLite dla platforma uniwersalna systemu Windows, jak i środowiska uruchomieniowego Visual C++ 2015 dla aplikacji platforma uniwersalna systemu Windows.

    Dodawanie odwołania do platformy UWP sqLite

  4. Otwórz plik MainPage.xaml.cs i usuń komentarz definicji #define OFFLINE_SYNC_ENABLED .

  5. W programie Visual Studio naciśnij klawisz F5 , aby ponownie skompilować i uruchomić aplikację kliencka. Aplikacja działa tak samo jak przed włączeniem synchronizacji w trybie offline. Jednak lokalna baza danych jest teraz wypełniana danymi, które mogą być używane w scenariuszu offline.

Aktualizowanie aplikacji w celu odłączenia od zaplecza

W tej sekcji przerywasz połączenie z zapleczem aplikacji mobilnej, aby symulować sytuację w trybie offline. Po dodaniu elementów danych program obsługi wyjątków informuje, że aplikacja jest w trybie offline. W tym stanie nowe elementy dodane w magazynie lokalnym i zostaną zsynchronizowane z zapleczem aplikacji mobilnej po następnym uruchomieniu wypychania w stanie połączenia.

  1. Edytuj plik App.xaml.cs w udostępnionym projekcie. Oznacz jako komentarz inicjowanie elementu MobileServiceClient i dodaj następujący wiersz, który używa nieprawidłowego adresu URL aplikacji mobilnej:

      public static MobileServiceClient MobileService = new MobileServiceClient("https://your-service.azurewebsites.fail");
    

    Możesz również zademonstrować zachowanie w trybie offline, wyłączając sieć Wi-Fi i sieci komórkowe na urządzeniu lub korzystając z trybu samolotu.

  2. Naciśnij klawisz F5 , aby skompilować i uruchomić aplikację. Zwróć uwagę, że synchronizacja nie powiodła się podczas odświeżania po uruchomieniu aplikacji.

  3. Wprowadź nowe elementy i zwróć uwagę, że wypychanie kończy się niepowodzeniem ze stanem CancelledByNetworkError za każdym razem, gdy klikniesz przycisk Zapisz. Jednak nowe elementy zadań do wykonania istnieją w sklepie lokalnym, dopóki nie będą mogły zostać wypchnięte do zaplecza aplikacji mobilnej. W aplikacji produkcyjnej, jeśli pomijasz te wyjątki, aplikacja kliencka zachowuje się tak, jakby nadal była połączona z zapleczem aplikacji mobilnej.

  4. Zamknij aplikację i uruchom ją ponownie, aby sprawdzić, czy nowo utworzone elementy są utrwalane w magazynie lokalnym.

  5. (Opcjonalnie) W programie Visual Studio otwórz Eksploratora serwera. Przejdź do bazy danych w usłudze Azure-SQL>Databases. Kliknij prawym przyciskiem myszy bazę danych i wybierz polecenie Otwórz w SQL Server Eksplorator obiektów. Teraz możesz przejść do tabeli bazy danych SQL i jej zawartości. Sprawdź, czy dane w bazie danych zaplecza nie uległy zmianie.

  6. (Opcjonalnie) Użyj narzędzia REST, takiego jak Fiddler lub Postman, aby wykonać zapytanie względem zaplecza mobilnego przy użyciu zapytania GET w formularzu https://<your-mobile-app-backend-name>.azurewebsites.net/tables/TodoItem.

Aktualizowanie aplikacji w celu ponownego połączenia zaplecza aplikacji mobilnej

W tej sekcji ponownie połączysz aplikację z zapleczem aplikacji mobilnej. Te zmiany symulują ponowne połączenie sieciowe w aplikacji.

Po pierwszym uruchomieniu aplikacji program obsługi zdarzeń wywołuje InitLocalStoreAsyncmetodę OnNavigatedTo . Ta metoda z kolei wywołuje funkcję SyncAsync synchronizacji magazynu lokalnego z bazą danych zaplecza. Aplikacja próbuje przeprowadzić synchronizację podczas uruchamiania.

  1. Otwórz plik App.xaml.cs w projekcie udostępnionym i usuń komentarz z poprzedniej inicjalizacji MobileServiceClient , aby użyć poprawnego adresu URL aplikacji mobilnej.

  2. Naciśnij klawisz F5 , aby ponownie skompilować i uruchomić aplikację. Aplikacja synchronizuje zmiany lokalne z zapleczem aplikacji mobilnej Platformy Azure przy użyciu operacji wypychania i ściągania po wykonaniu programu obsługi zdarzeń OnNavigatedTo .

  3. (Opcjonalnie) Wyświetl zaktualizowane dane przy użyciu SQL Server Eksplorator obiektów lub narzędzia REST, takiego jak Fiddler. Zwróć uwagę, że dane zostały zsynchronizowane między bazą danych zaplecza aplikacji mobilnej Platformy Azure a magazynem lokalnym.

  4. W aplikacji kliknij pole wyboru obok kilku elementów, aby je ukończyć w sklepie lokalnym.

    UpdateCheckedTodoItem wywołania SyncAsync do synchronizacji każdego ukończonego elementu z zapleczem aplikacji mobilnej. SyncAsync wywołuje zarówno wypychanie, jak i ściąganie. Jednak za każdym razem, gdy wykonujesz ściąganie względem tabeli, do której klient wprowadził zmiany, wypychanie jest zawsze wykonywane automatycznie. To zachowanie gwarantuje, że wszystkie tabele w magazynie lokalnym wraz z relacjami pozostają spójne. To zachowanie może spowodować nieoczekiwane wypchnięcie. Aby uzyskać więcej informacji na temat tego zachowania, zobacz Synchronizacja danych w trybie offline w usłudze Azure Mobile Apps.

Podsumowanie interfejsu API

Do obsługi funkcji offline usług mobilnych użyliśmy interfejsu IMobileServiceSyncTable i zainicjowaliśmy element MobileServiceClient.SyncContext z lokalną bazą danych SQLite. W trybie offline normalne operacje CRUD dla usługi Mobile Apps działają tak, jakby aplikacja nadal jest połączona, gdy operacje występują w sklepie lokalnym. Następujące metody służą do synchronizowania magazynu lokalnego z serwerem:

  • PushAsync Ponieważ ta metoda jest elementem członkowskim IMobileServicesSyncContext, zmiany we wszystkich tabelach są wypychane do zaplecza. Do serwera są wysyłane tylko rekordy ze zmianami lokalnymi.
  • PullAsync Ściąganie jest uruchamiane z tabeli IMobileServiceSyncTable. Po śledzeniu zmian w tabeli jest uruchamiane niejawne wypychanie, aby upewnić się, że wszystkie tabele w magazynie lokalnym wraz z relacjami pozostają spójne. Parametr pushOtherTables określa, czy inne tabele w kontekście są wypychane w niejawnym wypchnięciu. Parametr zapytania przyjmuje ciąg zapytania IMobileServiceTableQuery<T> lub OData w celu filtrowania zwróconych danych. Parametr queryId służy do definiowania synchronizacji przyrostowej. Aby uzyskać więcej informacji, zobacz Temat Data Sync w trybie offline w usłudze Azure Mobile Apps.
  • Przeczyszczanie asynchroniczne Aplikacja powinna okresowo wywoływać tę metodę, aby przeczyścić nieaktualne dane ze sklepu lokalnego. Użyj parametru force , jeśli musisz przeczyścić wszelkie zmiany, które nie zostały jeszcze zsynchronizowane.

Aby uzyskać więcej informacji na temat tych pojęć, zobacz Temat Offline Data Sync in Azure Mobile Apps (Synchronizacja danych offline w usłudze Azure Mobile Apps).

Więcej informacji

Poniższe tematy zawierają dodatkowe informacje ogólne na temat funkcji synchronizacji offline usługi Mobile Apps: