Ajouter la synchronisation des données hors connexion à votre application .NET MAUI
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 .NET MAUI. La synchronisation hors connexion permet aux utilisateurs finaux d’interagir avec une application mobile 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 didacticiel, vous devez avoir terminé le didacticiel de démarrage rapide .NET MAUI , qui inclut la création d’un service principal approprié.
Pour en savoir plus sur la fonctionnalité de synchronisation hors connexion, consultez la rubrique Offline Data Sync dans Azure Mobile Apps.
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
est soutenu par une base de données SQLite sur appareil et synchronisé avec la base de données back-end.
Dans Visual Studio :
Cliquez avec le bouton droit sur la solution
TodoApp
, puis sélectionnez Gérer les packages NuGet pour la solution....Dans le nouvel onglet, sélectionnez Parcourir, puis entrez Microsoft.Datasync.Client dans la zone de recherche.
Sélectionnez le package
Microsoft.Datasync.Client.SQLiteStore
.Dans le volet de droite, sélectionnez tous les projets clients (à l’exception du projet
TodoAppService.NET6
).Sélectionnez Installer.
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 :
Ajoutez l’instruction
using
suivante en haut du fichier :using Microsoft.Datasync.Client.SQLiteStore;
Modifiez la définition de
_table
pour qu’elle soit unIOfflineTable<TodoItem>
:/// <summary> /// Reference to the table used for datasync operations. /// </summary> private IOfflineTable<TodoItem> _table = null;
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; }
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;
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.MAUI
, modifiez le fichier MainPage.xaml.cs
. Modifiez la définition du RemoteTodoService
comme suit :
TodoService = new RemoteTodoService(GetAuthenticationToken)
{
OfflineDb = FileSystem.CacheDirectory + "/offline.db"
};
Si vous n’avez pas terminé le didacticiel d’authentification , la définition doit ressembler à ceci à la place :
TodoService = new RemoteTodoService()
{
OfflineDb = FileSystem.CacheDirectory + "/offline.db"
};
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 :
Ouvrez le groupe de ressources qui contient les ressources du guide de démarrage rapide.
Sélectionnez la base de données
quickstart
.Sélectionnez l’éditeur de requête (préversion).
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.
Dans l’éditeur de requête, entrez
SELECT * FROM [dbo].[TodoItems]
. Sélectionnez ensuite Exécuter.
Une liste des TodoItems actuels s’affiche.
À 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.
- Ouvrez le portail Azure .
- Sélectionnez le groupe de ressources contenant les ressources de démarrage rapide.
- Sélectionnez Supprimer le groupe de ressources.
- 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
- Passez en revue la documentation HOW TO :