Offlinesynchronisatie inschakelen voor uw Windows-app
Overzicht
In deze zelfstudie leert u hoe u offlineondersteuning toevoegt aan een UWP-app (Universal Windows Platform) met behulp van een back-end van azure Mobile App. Met offlinesynchronisatie kunnen eindgebruikers communiceren met een mobiele app die gegevens bekijkt, toevoegt of wijzigt, zelfs als er geen netwerkverbinding is. Wijzigingen worden opgeslagen in een lokale database. Zodra het apparaat weer online is, worden deze wijzigingen gesynchroniseerd met de externe back-end.
In deze zelfstudie werkt u het UWP-app-project bij vanuit de zelfstudie Een Windows-app maken ter ondersteuning van de offlinefuncties van Azure Mobile Apps. Als u het gedownloade snelstartserverproject niet gebruikt, moet u de uitbreidingspakketten voor gegevenstoegang toevoegen aan uw project. Zie Werken met de SDK van de .NET-back-endserver voor Azure Mobile Appsvoor meer informatie over serveruitbreidingspakketten.
Zie het onderwerp Offline Data Sync in Azure Mobile Appsvoor meer informatie over de functie voor offlinesynchronisatie.
Vereisten
Voor deze zelfstudie zijn de volgende vereisten nodig:
- Visual Studio 2013 wordt uitgevoerd op Windows 8.1 of hoger.
- Voltooiing van Een Windows-app maken.
- Azure Mobile Services SQLite Store-
- SQLite voor Universal Windows Platform-ontwikkeling
De client-app bijwerken om offlinefuncties te ondersteunen
Met offlinefuncties van Azure Mobile App kunt u communiceren met een lokale database wanneer u zich in een offlinescenario bevindt. Als u deze functies in uw app wilt gebruiken, initialiseert u een SyncContext- naar een lokale store. Verwijs vervolgens naar de tabel via de interface IMobileServiceSyncTable. SQLite wordt gebruikt als het lokale archief op het apparaat.
Installeer de SQLite-runtime voor het Universal Windows Platform.
Open in Visual Studio NuGet-pakketbeheer voor het UWP-app-project dat u hebt voltooid in de Een Windows-app maken zelfstudie. Zoek en installeer het Microsoft.Azure.Mobile.Client.SQLiteStore NuGet-pakket.
Klik in Solution Explorer met de rechtermuisknop op References>Add Reference...>Universal Windows>Extensionsen schakel vervolgens zowel SQLite for Universal Windows Platform als Visual C++ 2015 Runtime for Universal Windows Platform-appsin.
Open het MainPage.xaml.cs-bestand en verwijder de opmerkingen bij de definitie van de
#define OFFLINE_SYNC_ENABLED
.Druk in Visual Studio op de toets F5 om de client-app opnieuw te bouwen en uit te voeren. De app werkt hetzelfde als voordat u offlinesynchronisatie hebt ingeschakeld. De lokale database wordt nu echter gevuld met gegevens die kunnen worden gebruikt in een offlinescenario.
De app bijwerken om de verbinding met de back-end te verbreken
In deze sectie onderbreekt u de verbinding met de back-end van uw mobiele app om een offlinesituatie te simuleren. Wanneer u gegevensitems toevoegt, geeft uw uitzonderingshandler aan dat de app zich in de offlinemodus bevindt. In deze status worden nieuwe items die zijn toegevoegd in de lokale store, gesynchroniseerd met de back-end van de mobiele app wanneer push wordt uitgevoerd in een verbonden status.
Bewerk App.xaml.cs in het gedeelde project. Markeer de initialisatie van de MobileServiceClient- als commentaar en voeg de volgende regel toe, die gebruikmaakt van een ongeldige URL voor mobiele apps:
public static MobileServiceClient MobileService = new MobileServiceClient("https://your-service.azurewebsites.fail");
U kunt ook offlinegedrag demonstreren door wifi en mobiele netwerken op het apparaat uit te schakelen of de vliegtuigstand te gebruiken.
Druk op F5- om de app te bouwen en uit te voeren. U ziet dat de synchronisatie is mislukt bij vernieuwen wanneer de app werd gestart.
Voer nieuwe items in en u ziet dat push mislukt met een CancelledByNetworkError status telkens wanneer u op Opslaanklikt. De nieuwe takenitems bevinden zich echter in de lokale store totdat ze naar de back-end van de mobiele app kunnen worden gepusht. Als u in een productie-app deze uitzonderingen onderdrukt, gedraagt de client-app zich alsof deze nog steeds is verbonden met de back-end van de mobiele app.
Sluit de app en start deze opnieuw om te controleren of de nieuwe items die u hebt gemaakt, behouden blijven in de lokale store.
(Optioneel) Open in Visual Studio Server Explorer. Navigeer naar uw database in Azure->SQL Databases. Klik met de rechtermuisknop op de database en selecteer Openen in SQL Server Object Explorer. U kunt nu naar uw SQL-databasetabel en de inhoud ervan bladeren. Controleer of de gegevens in de back-enddatabase niet zijn gewijzigd.
(Optioneel) Gebruik een REST-hulpprogramma zoals Fiddler of Postman om een query uit te voeren op uw mobiele back-end met behulp van een GET-query in het formulier
https://<your-mobile-app-backend-name>.azurewebsites.net/tables/TodoItem
.
De app bijwerken om de back-end van uw mobiele app opnieuw te verbinden
In deze sectie maakt u opnieuw verbinding met de back-end van de mobiele app. Met deze wijzigingen wordt een netwerkverbinding in de app gesimuleerd.
Wanneer u de toepassing voor het eerst uitvoert, roept de OnNavigatedTo
gebeurtenis-handler InitLocalStoreAsync
aan. Met deze methode wordt op zijn beurt SyncAsync
aangeroepen om uw lokale archief te synchroniseren met de back-enddatabase. De app probeert te synchroniseren bij het opstarten.
Open App.xaml.cs in het gedeelde project en verwijder de opmerkingen bij de vorige initialisatie van
MobileServiceClient
om de juiste URL van de mobiele app te gebruiken.Druk op de toets F5 om de app opnieuw te bouwen en uit te voeren. De app synchroniseert uw lokale wijzigingen met de back-end van azure Mobile App met behulp van push- en pull-bewerkingen wanneer de
OnNavigatedTo
gebeurtenis-handler wordt uitgevoerd.(Optioneel) Bekijk de bijgewerkte gegevens met behulp van SQL Server Object Explorer of een REST-hulpprogramma zoals Fiddler. Let op dat de gegevens zijn gesynchroniseerd tussen de back-enddatabase van de Azure Mobile App en de lokale opslag.
Klik in de app op het selectievakje naast een paar items om deze in de lokale store te voltooien.
UpdateCheckedTodoItem
roeptSyncAsync
aan om elk voltooid item te synchroniseren met de back-end van de mobiele app.SyncAsync
roept push en pull aan. echter wanneer u een pull uitvoert op basis van een tabel waarnaar de client wijzigingen heeft aangebracht, wordt er altijd automatisch een push uitgevoerd. Dit gedrag zorgt ervoor dat alle tabellen in het lokale archief samen met relaties consistent blijven. Dit gedrag kan leiden tot een onverwachte push. Zie Offline Data Sync in Azure Mobile Appsvoor meer informatie over dit gedrag.
API samenvatting
Ter ondersteuning van de offlinefuncties van mobiele services hebben we de interface IMobileServiceSyncTable en MobileServiceClient.SyncContext geïnitialiseerd met een lokale SQLite-database. Wanneer u offline bent, werken de normale CRUD-bewerkingen voor mobiele apps alsof de app nog steeds is verbonden terwijl de bewerkingen plaatsvinden in de lokale store. De volgende methoden worden gebruikt om het lokale archief te synchroniseren met de server:
- PushAsync- Omdat deze methode lid is van IMobileServicesSyncContext-, worden wijzigingen in alle tabellen naar de back-end gepusht. Alleen records met lokale wijzigingen worden naar de server verzonden.
- PullAsync Een pull wordt gestart vanuit een IMobileServiceSyncTable. Wanneer er bijgehouden wijzigingen in de tabel zijn, wordt een impliciete push uitgevoerd om ervoor te zorgen dat alle tabellen in het lokale archief samen met relaties consistent blijven. De pushOtherTables parameter bepaalt of andere tabellen in de context worden gepusht in een impliciete push. De parameter query gebruikt een IMobileServiceTableQuery-<T->- of OData-queryreeks om de geretourneerde gegevens te filteren. De parameter queryId wordt gebruikt om incrementele synchronisatie te definiëren. Zie Offline data sync in Azure Mobile Appsvoor meer informatie.
- PurgeAsync Uw app moet deze methode regelmatig aanroepen om verouderde gegevens uit het lokale archief te verwijderen. Gebruik de parameter forceren wanneer u wijzigingen wilt opschonen die nog niet zijn gesynchroniseerd.
Zie Offline Data Sync in Azure Mobile Appsvoor meer informatie over deze concepten.
Meer informatie
De volgende onderwerpen bevatten aanvullende achtergrondinformatie over de offlinesynchronisatiefunctie van Mobile Apps: