Condividi tramite


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:

  1. Fare clic con il pulsante destro del mouse sulla soluzione TodoApp, quindi selezionare Gestisci pacchetti NuGet per la soluzione....

  2. Nella nuova scheda selezionare Sfoglia, quindi immettere Microsoft.Datasync.Client nella casella di ricerca.

    Screenshot dell'aggiunta di NuGet offline in Visual Studio.

  3. Selezionare il pacchetto Microsoft.Datasync.Client.SQLiteStore.

  4. Nel riquadro di destra selezionare tutti i progetti client , ad eccezione del progetto TodoAppService.NET6.

  5. Selezionare Installa.

  6. 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:

  1. Aggiungere l'istruzione using seguente all'inizio del file:

    using Microsoft.Datasync.Client.SQLiteStore;
    
  2. Modificare la definizione di _table in modo che sia un IOfflineTable<TodoItem>:

    /// <summary>
    /// Reference to the table used for datasync operations.
    /// </summary>
    private IOfflineTable<TodoItem> _table = null;
    
  3. Aggiungere una nuova proprietà per archiviare il percorso del database offline:

    /// <summary>
    /// The path to the offline database
    /// </summary>
    public string OfflineDb { get; set; }
    
  4. 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;
    
  5. 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:

  1. Aprire il portale di Azure .

  2. Aprire il gruppo di risorse che contiene le risorse per l'avvio rapido.

  3. Selezionare il database quickstart.

  4. Selezionare l'editor di query (anteprima).

  5. 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.
  6. Nell'editor di query immettere SELECT * FROM [dbo].[TodoItems]. Selezionare quindi Esegui.

Verrà visualizzato un elenco degli elementi TodoItem correnti.

Screenshot dei risultati nell'editor di query Q L.

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 nell'app per eseguire il push dei dati nella coda nel servizio back-end. Le transazioni HTTP vengono visualizzate nella finestra Debug di output.

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.

  1. Aprire il portale di Azure .
  2. Selezionare il gruppo di risorse che contiene le risorse di avvio rapido.
  3. Selezionare Elimina gruppo di risorse.
  4. 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