Aktivera offlinesynkronisering av Windows-appen

Översikt

Den här självstudien visar hur du lägger till offlinestöd till en Universell Windows-plattform-app (UWP) med hjälp av en Azure Mobile App-serverdel. Offlinesynkronisering gör att slutanvändare kan 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.

I den här självstudien uppdaterar du UWP-appprojektet från självstudien Skapa en Windows-app för att stödja offlinefunktionerna i Azure Mobile Apps. Om du inte använder det nedladdade snabbstartsserverprojektet måste du lägga till paketen för dataåtkomsttillägg i projektet. Mer information om servertilläggspaket finns i Arbeta med .NET-serverdels-SDK för Azure Mobile Apps.

Mer information om funktionen för offlinesynkronisering finns i avsnittet offlinedatasynkronisering i Azure Mobile Apps.

Krav

Den här självstudien kräver följande krav:

Uppdatera klientappen för att stödja offlinefunktioner

Med offlinefunktioner i Azure Mobile App kan du interagera med en lokal databas när du befinner dig i ett offlinescenario. Om du vill använda dessa funktioner i din app initierar du en SyncContext till en lokal butik. Referera sedan till tabellen via gränssnittet IMobileServiceSyncTable . SQLite används som lokalt arkiv på enheten.

  1. Installera SQLite-körningen för Universell Windows-plattform.

  2. Öppna NuGet-pakethanteraren för UWP-appprojektet som du slutförde i självstudien Skapa en Windows-app i Visual Studio. Sök efter och installera NuGet-paketet Microsoft.Azure.Mobile.Client.SQLiteStore .

  3. I Solution Explorer högerklickardu på Referenser >Lägg till referens...>Universella fönster>Tillägg och aktivera sedan både SQLite för Universell Windows-plattform och Visual C++ 2015 Runtime för Universell Windows-plattform appar.

    Lägg till SQLite UWP-referens

  4. Öppna filen MainPage.xaml.cs och avkommentera #define OFFLINE_SYNC_ENABLED definitionen.

  5. Tryck på F5 i Visual Studio för att återskapa och köra klientappen. Appen fungerar på samma sätt som den gjorde innan du aktiverade offlinesynkronisering. Men den lokala databasen fylls nu i med data som kan användas i ett offlinescenario.

Uppdatera appen för att koppla från serverdelen

I det här avsnittet bryter du anslutningen till mobilappens serverdel för att simulera en offlinesituation. När du lägger till dataobjekt meddelar undantagshanteraren att appen är i offlineläge. I det här tillståndet läggs nya objekt till i det lokala arkivet och synkroniseras till mobilappens serverdel när push-överföringen körs i ett anslutet tillstånd.

  1. Redigera App.xaml.cs i det delade projektet. Kommentera ut initieringen av MobileServiceClient och lägg till följande rad, som använder en ogiltig mobilapps-URL:

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

    Du kan också demonstrera offlinebeteende genom att inaktivera Wifi och mobilnät på enheten eller använda flygplansläge.

  2. Tryck på F5 för att skapa och köra appen. Observera att synkroniseringen misslyckades vid uppdatering när appen startades.

  3. Ange nya objekt och observera att push-överföringen misslyckas med statusen CancelledByNetworkError varje gång du klickar på Spara. De nya att göra-objekten finns dock i det lokala arkivet tills de kan push-överföras till mobilappens serverdel. Om du undertrycker dessa undantag i en produktionsapp fungerar klientappen som om den fortfarande är ansluten till mobilappens serverdel.

  4. Stäng appen och starta om den för att kontrollera att de nya objekten som du skapade sparas i det lokala arkivet.

  5. (Valfritt) Öppna ServerUtforskaren i Visual Studio. Gå till databasen i Azure-SQL>Databases. Högerklicka på databasen och välj Öppna i SQL Server Object Explorer. Nu kan du bläddra till sql-databastabellen och dess innehåll. Kontrollera att data i serverdelsdatabasen inte har ändrats.

  6. (Valfritt) Använd ett REST-verktyg som Fiddler eller Postman för att fråga din mobila serverdel med hjälp av en GET-fråga i formuläret https://<your-mobile-app-backend-name>.azurewebsites.net/tables/TodoItem.

Uppdatera appen för att återansluta mobilappens serverdel

I det här avsnittet ska du återansluta appen till mobilappens serverdel. Dessa ändringar simulerar en nätverksåteranslutning i appen.

När du först kör programmet OnNavigatedTo anropar InitLocalStoreAsynchändelsehanteraren . Den här metoden anropar SyncAsync i sin tur för att synkronisera ditt lokala arkiv med serverdelsdatabasen. Appen försöker synkronisera vid start.

  1. Öppna App.xaml.cs i det delade projektet och avkommentera din tidigare initiering för MobileServiceClient att använda rätt webbadress för mobilappen.

  2. Tryck på F5 för att återskapa och köra appen. Appen synkroniserar dina lokala ändringar med Azure Mobile App-serverdelen med hjälp av push- och pull-åtgärder när OnNavigatedTo händelsehanteraren körs.

  3. (Valfritt) Visa uppdaterade data med antingen SQL Server Object Explorer eller ett REST-verktyg som Fiddler. Observera att data har synkroniserats mellan Azure Mobile App-serverdelsdatabasen och det lokala arkivet.

  4. I appen klickar du på kryssrutan bredvid några objekt för att slutföra dem i det lokala arkivet.

    UpdateCheckedTodoItem anropar SyncAsync för att synkronisera varje slutfört objekt med mobilappens serverdel. SyncAsync anropar både push och pull. Men när du kör en pull-överföring mot en tabell som klienten har gjort ändringar i körs alltid en push-överföring automatiskt. Det här beteendet säkerställer att alla tabeller i det lokala arkivet tillsammans med relationer förblir konsekventa. Det här beteendet kan resultera i en oväntad push-överföring. Mer information om det här beteendet finns i Offline Data Sync i Azure Mobile Apps.

API-sammanfattning

För att stödja offlinefunktionerna i mobila tjänster använde vi gränssnittet IMobileServiceSyncTable och initierade MobileServiceClient.SyncContext med en lokal SQLite-databas. När du är offline fungerar de normala CRUD-åtgärderna för Mobile Apps som om appen fortfarande är ansluten medan åtgärderna utförs mot det lokala arkivet. Följande metoder används för att synkronisera det lokala arkivet med servern:

  • PushAsync Eftersom den här metoden är medlem i IMobileServicesSyncContext skickas ändringar i alla tabeller till serverdelen. Endast poster med lokala ändringar skickas till servern.
  • PullAsync En hämtning startas från en IMobileServiceSyncTable. När det finns spårade ändringar i tabellen körs en implicit push-överföring för att se till att alla tabeller i det lokala arkivet tillsammans med relationer förblir konsekventa. Parametern pushOtherTables styr om andra tabeller i kontexten pushas i en implicit push. Frågeparametern tar en IMobileServiceTableQuery<T>- eller OData-frågesträng för att filtrera returnerade data. Parametern queryId används för att definiera inkrementell synkronisering. Mer information finns i Offline datasynkronisering i Azure Mobile Apps.
  • PurgeAsync Appen bör regelbundet anropa den här metoden för att rensa inaktuella data från det lokala arkivet. Använd force-parametern när du behöver rensa ändringar som ännu inte har synkroniserats.

Mer information om dessa begrepp finns i Offline Data Sync i Azure Mobile Apps.

Mer information

Följande avsnitt innehåller ytterligare bakgrundsinformation om funktionen för offlinesynkronisering i Mobile Apps: