Abilitare la sincronizzazione offline per l'app di WindowsEnable offline sync for your Windows app

PanoramicaOverview

Questa esercitazione illustra come aggiungere il supporto offline a un'app UWP (Universal Windows Platform) tramite un back-end di App per dispositivi mobili di Azure.This tutorial shows you how to add offline support to a Universal Windows Platform (UWP) app using an Azure Mobile App backend. La sincronizzazione offline consente agli utenti finali di interagire con un'app per dispositivi mobili, visualizzando, aggiungendo e modificando i dati, anche se non è disponibile una connessione di rete.Offline sync allows end users to interact with a mobile app--viewing, adding, or modifying data - even when there is no network connection. Le modifiche vengono archiviate in un database locale.Changes are stored in a local database. Quando il dispositivo torna online, vengono sincronizzate con il back-end remoto.Once the device is back online, these changes are synced with the remote backend.

In questa esercitazione verrà aggiornato il progetto di app UWP creato nell'esercitazione Creare un'app Windows in modo da supportare le funzionalità offline di App per dispositivi mobili di Azure.In this tutorial, you update the UWP app project from the tutorial [Create a Windows app] to support the offline features of Azure Mobile Apps. Se non si usa il progetto server di avvio rapido scaricato, è necessario aggiungere al progetto il pacchetto di estensione per l'accesso ai dati.If you do not use the downloaded quick start server project, you must add the data access extension packages to your project. Per altre informazioni sui pacchetti di estensione server, vedere l'articolo relativo all' utilizzo dell'SDK del server back-end .NET per app per dispositivi mobili di Azure.For more information about server extension packages, see Work with the .NET backend server SDK for Azure Mobile Apps.

Per altre informazioni sulla funzionalità di sincronizzazione offline, vedere l'argomento Sincronizzazione di dati offline nelle app per dispositivi mobili di Azure.To learn more about the offline sync feature, see the topic [Offline Data Sync in Azure Mobile Apps].

RequisitiRequirements

Per questa esercitazione sono necessari i prerequisiti seguenti:This tutorial requires the following pre-requisites:

Aggiornare l'app client per supportare le funzionalità offlineUpdate the client app to support offline features

Le funzionalità offline delle app per dispositivi mobili di Azure consentono di interagire con un database locale in uno scenario offline.Azure Mobile App offline features allow you to interact with a local database when you are in an offline scenario. Per usare queste funzionalità nell'app, inizializzare SyncContext in un archivio locale.To use these features in your app, you initialize a SyncContext to a local store. Quindi, fare riferimento alla tabella tramite l'interfaccia di IMobileServiceSyncTable .Then reference your table through the IMobileServiceSyncTable interface. SQLite viene usato come archivio locale nel dispositivo.SQLite is used as the local store on the device.

  1. Installare il runtime di SQLite per la piattaforma UWP (Universal Windows Platform).Install the SQLite runtime for the Universal Windows Platform.
  2. In Visual Studio aprire Gestione pacchetti NuGet per il progetto di app UWP completato nell'esercitazione Creare un'app Windows.In Visual Studio, open the NuGet package manager for the UWP app project that you completed in the [Create a Windows app] tutorial. Cercare e installare il pacchetto NuGet Microsoft.Azure.Mobile.Client.SQLiteStore.Search for and install the Microsoft.Azure.Mobile.Client.SQLiteStore NuGet package.
  3. In Esplora soluzioni fare doppio clic su Riferimenti > Aggiungi riferimento... >Universal Windows>Estensioni e quindi abilitare sia SQLite for Universal Windows Platform che Visual C++ 2015 Runtime for Universal Windows Platform apps.In Solution Explorer, right-click References > Add Reference... > Universal Windows > Extensions, then enable both SQLite for Universal Windows Platform and Visual C++ 2015 Runtime for Universal Windows Platform apps.

    Aggiungere un riferimento UWP SQLite

  4. Aprire il file MainPage.xaml.cs e rimuovere i simboli di commendo dalla definizione #define OFFLINE_SYNC_ENABLED.Open the MainPage.xaml.cs file and uncomment the #define OFFLINE_SYNC_ENABLED definition.
  5. In Visual Studio premere F5 per ricompilare ed eseguire l'app client.In Visual Studio, press the F5 key to rebuild and run the client app. L'app funziona esattamente come prima di attivare la sincronizzazione offline. Tuttavia, il database locale è ora popolato con dati che possono essere usati in uno scenario offline.The app works the same as it did before you enabled offline sync. However, the local database is now populated with data that can be used in an offline scenario.

Aggiornare l'app per disconnetterla dal back-endUpdate the app to disconnect from the backend

In questa sezione verrà interrotta la connessione al back-end dell'app per dispositivi mobili per simulare una situazione offline.In this section, you break the connection to your Mobile App backend to simulate an offline situation. Quando si aggiungono elementi di dati, il gestore di eccezioni informa che l'app è in modalità offline.When you add data items, your exception handler tells you that the app is in offline mode. In questo stato, nuovi elementi verranno aggiunti all'archivio locale che verranno sincronizzati con il back-end dell'app per dispositivi mobili la prima volta che verrà eseguita un'operazione di push in presenza di uno stato di connessione.In this state, new items added in the local store and will be synced to the mobile app backend when push is next run in a connected state.

  1. Modificare il file App.xaml.cs nel progetto condiviso.Edit App.xaml.cs in the shared project. Impostare come commento l'inizializzazione di MobileServiceClient e aggiungere la riga seguente, che usa un URL dell'app per dispositivi mobili non valido:Comment out the initialization of the MobileServiceClient and add the following line, which uses an invalid mobile app URL:

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

    È anche possibile illustrare il comportamento offline disabilitando le reti Wi-Fi e cellulare sul dispositivo o impostando la modalità aereo.You can also demonstrate offline behavior by disabling wifi and cellular networks on the device or use airplane mode.

  2. Premere F5 per compilare ed eseguire l'app.Press F5 to build and run the app. Si noti l'errore di sincronizzazione al momento dell'aggiornamento quando l'app viene avviata.Notice your sync failed on refresh when the app launched.
  3. Immettere nuovi elementi. Si noti che il push ha esito negativo con stato CancelledByNetworkError ogni volta che si fa clic su Salva.Enter new items and notice that push fails with a CancelledByNetworkError status each time you click Save. I nuovi elementi todo, tuttavia, sono presenti nell'archivio locale fino a quando non è possibile effettuarne il push al back-end dell'app per dispositivi mobili.However, the new todo items exist in the local store until they can be pushed to the mobile app backend. In un'app di produzione, se si eliminano queste eccezioni, l'app client si comporta come se fosse ancora connessa al back-end dell'app per dispositivi mobili.In a production app, if you suppress these exceptions the client app behaves as if it's still connected to the mobile app backend.
  4. Chiudere l'app e riavviarla per verificare che i nuovi elementi creati siano salvati in modo permanente nell'archivio locale.Close the app and restart it to verify that the new items you created are persisted to the local store.
  5. (Facoltativo) In Visual Studio aprire Esplora server.(Optional) In Visual Studio, open Server Explorer. Passare al database in Azure->Database SQL.Navigate to your database in Azure->SQL Databases. Fare clic con il pulsante destro del mouse sul database e scegliere Apri in Esplora oggetti di SQL Server.Right-click your database and select Open in SQL Server Object Explorer. È ora possibile passare alla tabella di database SQL e al relativo contenuto.Now you can browse to your SQL database table and its contents. Verificare che i dati nel database back-end non siano stati modificati.Verify that the data in the backend database has not changed.
  6. (Facoltativo) Usare uno strumento REST come Fiddler o Postman per eseguire una query sul back-end mobile, usando una query GET nel formato https://<your-mobile-app-backend-name>.azurewebsites.net/tables/TodoItem.(Optional) Use a REST tool such as Fiddler or Postman to query your mobile backend, using a GET query in the form https://<your-mobile-app-backend-name>.azurewebsites.net/tables/TodoItem.

Aggiornare l'app per la riconnessione al back-end dell'app per dispositivi mobiliUpdate the app to reconnect your Mobile App backend

In questa sezione verrà effettuata la riconnessione dell'app al back-end dell'app per dispositivi mobili.In this section, you reconnect the app to the mobile app backend. Queste modifiche simulano una riconnessione alla rete nell'app.These changes simulate a network reconnection on the app.

Alla prima esecuzione dell'applicazione, il gestore eventi OnNavigatedTo chiama InitLocalStoreAsync.When you first run the application, the OnNavigatedTo event handler calls InitLocalStoreAsync. Questo metodo a sua volta chiama SyncAsync per sincronizzare l'archivio locale con il database back-end.This method in turn calls SyncAsync to sync your local store with the backend database. L'app prova a eseguire la sincronizzazione all'avvio.The app attempts to sync on startup.

  1. Aprire App.xaml.cs nel progetto condiviso e rimuovere il commento dall'inizializzazione precedente di MobileServiceClient per l'URL corretto dell'app per dispositivi mobili.Open App.xaml.cs in the shared project, and uncomment your previous initialization of MobileServiceClient to use the correct the mobile app URL.
  2. Premere F5 per ricompilare ed eseguire l'app.Press the F5 key to rebuild and run the app. L'app sincronizza le modifiche locali con il back-end dell'app per dispositivi mobili di Azure usando operazioni push e pull quando viene eseguito il gestore eventi OnNavigatedTo.The app syncs your local changes with the Azure Mobile App backend using push and pull operations when the OnNavigatedTo event handler executes.
  3. (Facoltativo) Visualizzare i dati aggiornati usando Esplora oggetti di SQL Server o uno strumento REST come Fiddler.(Optional) View the updated data using either SQL Server Object Explorer or a REST tool like Fiddler. Si noti che i dati sono stati sincronizzati tra il database back-end dell'app per dispositivi mobili di Azure e l'archivio locale.Notice the data has been synchronized between the Azure Mobile App backend database and the local store.
  4. Nell'app fare clic sulla casella di controllo accanto ad alcuni elementi da completare nell'archivio locale.In the app, click the check box beside a few items to complete them in the local store.

    UpdateCheckedTodoItem chiama SyncAsync per sincronizzare ogni elemento completato con il back-end dell'app per dispositivi mobili.UpdateCheckedTodoItem calls SyncAsync to sync each completed item with the Mobile App backend. SyncAsync chiama operazioni sia push che pull.SyncAsync calls both push and pull. Tuttavia, ogni volta che si effettua il pull su una tabella a cui il client ha apportato modifiche, viene sempre effettuato automaticamente il push.However, whenever you execute a pull against a table that the client has made changes to, a push is always executed automatically. Questo comportamento assicura che tutte le tabelle nell'archivio locale e le relazioni restino coerentiThis behavior ensures all tables in the local store along with relationships remain consistent. e può determinare un'operazione push non prevista.This behavior may result in an unexpected push. Per altre informazioni su questo comportamento, vedere Sincronizzazione di dati offline nelle app per dispositivi mobili di Azure.For more information on this behavior, see [Offline Data Sync in Azure Mobile Apps].

Riepilogo dell'APIAPI Summary

Per supportare le funzionalità offline di Servizi mobili, è stata usata l'interfaccia IMobileServiceSyncTable ed è stato inizializzato MobileServiceClient.SyncContext con un database SQLite locale.To support the offline features of mobile services, we used the IMobileServiceSyncTable interface and initialized MobileServiceClient.SyncContext with a local SQLite database. In una situazione offline le normali operazioni CRUD per App per dispositivi mobili funzionano come se l'app fosse ancora connessa, mentre tutte le operazioni interessano l'archivio locale.When offline, the normal CRUD operations for Mobile Apps work as if the app is still connected while the operations occur against the local store. Per sincronizzare l'archivio locale con il server vengono usati i metodi seguenti:The following methods are used to synchronize the local store with the server:

  • PushAsync. Dato che questo metodo è membro di IMobileServicesSyncContext, viene effettuato il push al back-end delle modifiche in tutte le tabelle.PushAsync Because this method is a member of IMobileServicesSyncContext, changes across all tables are pushed to the backend. Solo i record con modifiche locali vengono inviati al server.Only records with local changes are sent to the server.
  • PullAsync. Viene avviato un pull da IMobileServiceSyncTable.PullAsync A pull is started from a IMobileServiceSyncTable. Se nella tabella sono presenti modifiche di cui si è tenuta traccia, viene eseguito un push implicito per assicurarsi che tutte le tabelle nell'archivio locale e le relazioni corrispondenti siano ancora coerenti.When there are tracked changes in the table, an implicit push is run to make sure that all tables in the local store along with relationships remain consistent. Il parametro pushOtherTables determina se viene effettuato il push implicito di altre tabelle nel contesto.The pushOtherTables parameter controls whether other tables in the context are pushed in an implicit push. Il parametro query riceve una stringa IMobileServiceTableQuery o una stringa di query OData per filtrare i dati restituiti.The query parameter takes an IMobileServiceTableQuery or OData query string to filter the returned data. Il parametro queryId viene usato per definire la sincronizzazione incrementale. Per altre informazioni, vedere Sincronizzazione di dati offline nelle app per dispositivi mobili di Azure.The queryId parameter is used to define incremental sync. For more information, see Offline Data Sync in Azure Mobile Apps.
  • PurgeAsync. L'app deve chiamare periodicamente questo metodo per ripulire l'archivio locale dai dati non aggiornati.PurgeAsync Your app should periodically call this method to purge stale data from the local store. Usare il parametro force quando è necessario ripulire tutte le modifiche non ancora sincronizzate.Use the force parameter when you need to purge any changes that have not yet been synced.

Per altre informazioni su questi concetti, vedere Sincronizzazione di dati offline nelle app per dispositivi mobili di Azure.For more information about these concepts, see Offline Data Sync in Azure Mobile Apps.

Altre informazioniMore info

Gli argomenti seguenti forniscono altre informazioni in background sulla funzionalità di sincronizzazione offline delle app per dispositivi mobili:The following topics provide additional background information on the offline sync feature of Mobile Apps: