Aggiungere la sincronizzazione dei dati offline all'app Windows (WPF)
Nota
Questo prodotto viene ritirato. Per una sostituzione dei progetti che usano .NET 8 o versione successiva, vedere la libreria datasync di Community Toolkit.
Questa esercitazione illustra la funzionalità di sincronizzazione offline di App per dispositivi mobili di Azure per l'app di avvio rapido WPF. La sincronizzazione offline consente agli utenti finali di interagire con un'app per dispositivi mobili, visualizzando, aggiungendo o modificando i dati, anche quando non è presente alcuna connessione di rete. Le modifiche vengono archiviate in un database locale. Una volta che il dispositivo è di nuovo online, queste modifiche vengono sincronizzate con il back-end remoto.
Prima di iniziare questa esercitazione, è necessario aver completato l'esercitazione introduttiva WPF, che include la creazione di un servizio back-end appropriato. Si presuppone anche che l'utente abbia aggiunto di autenticazione all'applicazione. È possibile aggiungere funzionalità offline all'app senza autenticazione.
Aggiornare l'app per supportare la sincronizzazione offline
Nell'operazione online si legge e si scrive da un IRemoteTable<T>
. Quando si usa la sincronizzazione offline, è invece possibile leggere e scrivere da un IOfflineTable<T>
. Il IOfflineTable<T>
è supportato da un database SQLite sul dispositivo e sincronizzato con il database back-end.
Aggiungere i pacchetti NuGet necessari
In Visual Studio:
Fare clic con il pulsante destro del mouse sulla soluzione
TodoApp
, quindi selezionare Gestisci pacchetti NuGet per la soluzione....Nella nuova scheda selezionare Sfoglia, quindi immettere Microsoft.Datasync.Client nella casella di ricerca.
Selezionare il pacchetto
Microsoft.Datasync.Client.SQLiteStore
.Nel riquadro di destra selezionare tutti i progetti client , ad eccezione del progetto
TodoAppService.NET6
.Selezionare Installa.
Accettare il contratto di licenza quando richiesto.
Aggiornare il client del servizio remoto
Aprire il progetto TodoApp.Data
e individuare la classe RemoteTodoService.cs
(all'interno della directory Services
). Aggiornare la classe come segue:
Aggiungere l'istruzione
using
seguente all'inizio del file:using Microsoft.Datasync.Client.SQLiteStore;
Modificare la definizione di
_table
in modo che sia unIOfflineTable<TodoItem>
:/// <summary> /// Reference to the table used for datasync operations. /// </summary> private IOfflineTable<TodoItem> _table = null;
Aggiungere una nuova proprietà per archiviare il percorso del database offline:
/// <summary> /// The path to the offline database /// </summary> public string OfflineDb { get; set; }
Aggiornare il metodo
InitializeAsync
per definire il database 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;
Aggiornare il
RefreshItemsAsync()
per eseguire la sincronizzazione 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; }
Impostare il percorso del database offline
Nel progetto TodoApp.WPF
modificare il file App.xaml.cs
. Modificare la definizione del RemoteTodoService
nel modo seguente:
TodoService = new RemoteTodoService(async () => await GetAuthenticationToken())
{
OfflineDb = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + "\\offline.db"
};
Se non è stata completata l'esercitazione sull'autenticazione , la definizione dovrebbe essere simile alla seguente:
TodoService = new RemoteTodoService()
{
OfflineDb = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + "\\offline.db"
};
Nota
È possibile archiviare il database offline ovunque si disponga di autorizzazioni di lettura/scrittura/creazione in un sistema Windows. La classe Environment.SpecialFolder
fornisce posizioni standard in base all'applicazione.
Testare l'app
L'app non viene sincronizzata con il back-end finché non viene premuta l'icona di aggiornamento. Per testare:
Aprire il gruppo di risorse che contiene le risorse per l'avvio rapido.
Selezionare il database
quickstart
.Selezionare l'editor di query (anteprima).
Accedere con l'autenticazione di SQL Server usando le stesse credenziali configurate per il database.
- Se necessario, verrà richiesto di consentire l'accesso per l'indirizzo IP. Selezionare il collegamento per aggiornare l'elenco consenti, quindi premere OK per ritentare l'account di accesso.
Nell'editor di query immettere
SELECT * FROM [dbo].[TodoItems]
. Selezionare quindi Esegui.
Verrà visualizzato un elenco degli elementi TodoItem correnti.
Apportare ora alcune modifiche tramite l'app. NON PREMERE AGGIORNA (ancora).
Ripetere l'istruzione SQL nel portale di Azure e verificare che non siano state apportate modifiche ai dati nel database.
Selezionare l'icona Aggiorna
Ripetere l'istruzione SQL nel portale di Azure e verificare che le modifiche siano state inoltrate al servizio remoto.
Pulire le risorse
A meno che non si stia eseguendo un'altra esercitazione introduttiva, è ora possibile eliminare le risorse associate al servizio back-end.
- Aprire il portale di Azure .
- Selezionare il gruppo di risorse che contiene le risorse di avvio rapido.
- Selezionare Elimina gruppo di risorse.
- Seguire le istruzioni per confermare l'eliminazione.
È anche possibile usare l'interfaccia della riga di comando di Azure:
az group delete -g quickstart
Se è stata usata l'interfaccia della riga di comando per sviluppatori di Azure per distribuire le risorse, è possibile usare il comando azd down
.
Il completamento dell'eliminazione richiederà alcuni minuti.
Passaggi successivi
- Esaminare la documentazione di PROCEDURA: