Ajouter la synchronisation des données hors connexion à votre application Windows (UWP)

Ce tutoriel traite de la fonctionnalité de synchronisation hors connexion d’Azure Mobile Apps pour l’application de démarrage rapide d’UWP. La synchronisation hors connexion permet aux utilisateurs finaux d’interagir avec une application mobile( affichage, ajout ou modification de données), même s’il n’existe aucune connexion réseau. Les modifications sont stockées dans une base de données locale. Une fois l'appareil de nouveau en ligne, ces modifications sont synchronisées avec le serveur principal distant.

Avant de commencer ce tutoriel, vous devez avoir terminé le didacticiel de démarrage rapide UWP, qui inclut la création d’un service principal approprié. Nous partons également du principe que vous avez ajouté l’authentification à votre application. Vous pouvez ajouter des fonctionnalités hors connexion à votre application sans authentification.

Mettre à jour l’application pour prendre en charge la synchronisation hors connexion

Dans l’opération en ligne, vous lisez et vous écrivez dans une IRemoteTable<T>. Quand vous utilisez la synchronisation hors connexion, vous lisez et vous écrivez à la place dans une IOfflineTable<T>. La IOfflineTable<T> s’appuie sur une base de données SQLite sur l’appareil et est synchronisée avec la base de données back-end.

Ajouter les packages NuGet nécessaires

Dans Visual Studio :

  1. Cliquez avec le bouton droit sur la TodoApp solution, puis sélectionnez Gérer les packages NuGet pour la solution....

  2. Dans le nouvel onglet, sélectionnez Parcourir, puis entrez Microsoft.Datasync.Client dans la zone de recherche.

    Screenshot of adding the offline NuGet in Visual Studio.

  3. Sélectionnez le package Microsoft.Datasync.Client.SQLiteStore.

  4. Dans le volet de droite, sélectionnez tous les projets clients (à l’exception du TodoAppService.NET6 projet).

  5. Sélectionnez Installer.

  6. Acceptez le contrat de licence lorsque vous y êtes invité.

Mettre à jour le client de service distant

Ouvrez le TodoApp.Data projet et recherchez la RemoteTodoService.cs classe (dans le Services répertoire). Mettez à jour la classe comme suit :

  1. Ajoutez l’instruction using suivante en haut du fichier :

    using Microsoft.Datasync.Client.SQLiteStore;
    
  2. Modifiez la définition d’une _tableIOfflineTable<TodoItem>valeur :

    /// <summary>
    /// Reference to the table used for datasync operations.
    /// </summary>
    private IOfflineTable<TodoItem> _table = null;
    
  3. Ajoutez une nouvelle propriété pour stocker l’emplacement de la base de données hors connexion :

    /// <summary>
    /// The path to the offline database
    /// </summary>
    public string OfflineDb { get; set; }
    
  4. Mettez à jour la InitializeAsync méthode pour définir la base de données hors connexion :

    // 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. Mettez à jour la RefreshItemsAsync() synchronisation hors connexion :

    /// <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;
    }
    

Définir l’emplacement de la base de données hors connexion

Dans le TodoApp.UWP projet, modifiez le App.xaml.cs fichier. Modifiez la définition des RemoteTodoService éléments suivants :

TodoService = new RemoteTodoService(GetAuthenticationToken)
{
    OfflineDb = ApplicationData.Current.LocalCacheFolder.Path + "\\offline.db"
};

Si vous n’avez pas terminé le didacticiel d’authentification, la définition doit ressembler à ceci à la place :

TodoService = new RemoteTodoService()
{
    OfflineDb = ApplicationData.Current.LocalCacheFolder.Path + "\\offline.db"
};

Vous devrez peut-être ajouter ce qui suit en haut du fichier s’il ApplicationData n’est pas reconnu :

using Windows.Storage;

Remarque

Le plateforme Windows universelle limite l’emplacement où vous pouvez lire et écrire des données. Vous pouvez utiliser l’un des dossiers de stockage dans ApplicationData.Current. Si vous souhaitez vous assurer que les données sont disponibles, mais pas sauvegardées dans le cloud, utilisez LocalCacheFolder.

Test de l'application

L’application ne se synchronise pas avec le back-end tant que l’icône d’actualisation n’est pas enfoncée. Pour tester :

  1. Ouvrez le portail Azure.

  2. Ouvrez le groupe de ressources qui contient les ressources du guide de démarrage rapide.

  3. Sélectionnez la quickstart base de données.

  4. Sélectionnez l’éditeur de requête (préversion).

  5. Connectez-vous avec l’authentification SQL Server à l’aide des mêmes informations d’identification que celles que vous avez configurées pour la base de données.

    • Si nécessaire, vous êtes invité à autoriser l’accès à votre adresse IP. Sélectionnez le lien pour mettre à jour la liste verte, puis appuyez sur OK pour réessayer la connexion.
  6. Dans l’éditeur de requête, entrez SELECT * FROM [dbo].[TodoItems]. Ensuite, sélectionnez Exécuter.

Une liste des TodoItems actuels s’affiche.

Screenshot of the results in the S Q L query editor.

À présent, apportez des modifications via votre application. NE PAS APPUYER SUR ACTUALISER (encore).

Répétez l’instruction SQL dans le Portail Azure et vérifiez qu’aucune modification n’a été apportée aux données de la base de données.

Sélectionnez l’icône Actualiser sur votre application pour envoyer (push) les données dans la file d’attente vers le service principal. Les transactions HTTP se produisent dans la fenêtre Débogage de sortie.

Répétez l’instruction SQL dans le Portail Azure et vérifiez que vos modifications ont été envoyées au service distant.

Nettoyer les ressources

Sauf si vous effectuez un autre didacticiel de démarrage rapide, vous pouvez supprimer les ressources associées au service principal maintenant.

  1. Ouvrez le portail Azure.
  2. Sélectionnez le groupe de ressources contenant les ressources de démarrage rapide.
  3. Sélectionnez Supprimer le groupe de ressources.
  4. Suivez les instructions pour confirmer la suppression.

Vous pouvez aussi utiliser l’interface Azure CLI :

az group delete -g quickstart

Si vous avez utilisé Azure Developer CLI pour déployer des ressources, vous pouvez utiliser la commande à la azd down place.

La suppression prend quelques minutes.

Étapes suivantes