Partager via


Ajouter la synchronisation des données hors connexion à votre application Avalonia

Note

Ce produit est mis hors service. Pour un remplacement des projets utilisant .NET 8 ou version ultérieure, consultez la bibliothèque Datasync Community Toolkit.

Ce tutoriel décrit la fonctionnalité de synchronisation hors connexion d’Azure Mobile Apps pour l’application de démarrage rapide Avalonia. 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 que l’appareil est de nouveau en ligne, ces modifications sont synchronisées avec le back-end distant.

Avant de commencer ce tutoriel, vous devez avoir terminé le didacticiel de démarrage rapide Avalonia, qui inclut la création d’un service principal approprié. Nous partons également du principe que vous avez ajouté d’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

En ligne, vous lisez et écrivez à partir d’un IRemoteTable<T>. Lorsque vous utilisez la synchronisation hors connexion, vous lisez et écrivez à partir d’un IOfflineTable<T> à la place. Le IOfflineTable<T> est soutenu par une base de données SQLite sur appareil et synchronisé 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 solution TodoApp, 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.

    Capture d’écran de l’ajout du NuGet hors connexion dans 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 projet TodoAppService.NET6).

  5. Sélectionnez Installer.

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

Mettre à jour le client de service distant

Ouvrez le projet TodoApp.Data et recherchez la classe RemoteTodoService.cs (dans le répertoire Services). 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 de _table pour qu’elle soit un IOfflineTable<TodoItem>:

    /// <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 méthode InitializeAsync 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 le RefreshItemsAsync() pour effectuer la 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 projet TodoApp.AvaloniaUI, modifiez le fichier MainWindowViewModel.cs dans le dossier ViewModels. Modifiez la définition du RemoteTodoService comme suit :

TodoService = new RemoteTodoService(async () => await GetAuthenticationToken())
{
    OfflineDb = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + "\\offline.db"
};

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

TodoService = new RemoteTodoService()
{
    OfflineDb = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + "\\offline.db"
};

Note

Vous pouvez stocker la base de données hors connexion où que vous disposiez d’autorisations de lecture/écriture/création sur un système Windows. La classe Environment.SpecialFolder donne des emplacements standard en fonction de l’application.

Tester 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 base de données quickstart.

  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]. Sélectionnez ensuite Exécuter.

Une liste des TodoItems actuels s’affiche.

Capture d’écran des résultats dans l’éditeur de requête S Q L.

À présent, apportez des modifications via votre application. N’APPUYEZ PAS sur ACTUALISER (pour l’instant).

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 les données dans la file d’attente au 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 également utiliser Azure CLI :

az group delete -g quickstart

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

La suppression prend quelques minutes.

Étapes suivantes