Activation de la synchronisation hors connexion pour votre application Windows

Vue d’ensemble

Ce didacticiel explique comment prendre en charge le mode hors connexion dans une application de plateforme Windows universelle (UWP) à l’aide d’un backend d’applications mobiles Azure. La synchronisation hors connexion permet aux utilisateurs finaux d’interagir avec une application mobile pour afficher, ajouter ou modifier des données, même lorsqu’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.

Dans ce didacticiel, vous allez mettre à jour le projet d’application UWP du didacticiel Créer une application Windows pour prendre en charge les fonctionnalités hors connexion d’Azure Mobile Apps. Si vous n’utilisez pas le projet de serveur du démarrage rapide téléchargé, vous devez ajouter les packages d’extension d’accès aux données à votre projet. Pour plus d'informations sur les packages d'extension de serveur, consultez Fonctionnement avec le Kit de développement logiciel (SDK) du serveur principal .NET pour Azure Mobile Apps.

Pour plus d’informations sur la fonctionnalité de synchronisation hors connexion, consultez la rubrique Synchronisation des données hors connexion dans Azure Mobile Apps.

Configuration requise

Ce didacticiel nécessite les prérequis suivants :

Mettre à jour l’application cliente pour prendre en charge les fonctionnalités hors connexion

Les fonctionnalités hors connexion de l’application mobile Azure vous permettent d’interagir avec une base de données locale hors connexion. Pour utiliser ces fonctionnalités dans votre application, vous initialisez un SyncContext dans un magasin local. Ensuite, référencez votre table par le biais de l’interface IMobileServiceSyncTable. SQLite est utilisé comme magasin local sur l’appareil.

  1. Installez le Runtime SQLite pour la plateforme Windows universelle.

  2. Dans Visual Studio, ouvrez le gestionnaire de package NuGet du projet d’application UWP que vous avez finalisé dans le didacticiel Créer une application Windows. Recherchez et installez le package NuGet Microsoft.Azure.Mobile.Client.SQLiteStore.

  3. Dans Explorateur de solutions, cliquez avec le bouton droit sur Références>ajouter une référence...>Windows> universel Extensions, puis activez SQLite pour plateforme Windows universelle et Visual C++ 2015 Runtime pour les applications plateforme Windows universelle.

    Ajouter une référence SQLite UWP

  4. Ouvrez le fichier MainPage.xaml.cs et supprimez les marques de commentaires de la définition #define OFFLINE_SYNC_ENABLED.

  5. Dans Visual Studio, appuyez sur F5 pour régénérer et exécuter l'application cliente. L’application fonctionne de la même façon qu’avant que vous activiez la synchronisation hors connexion. Toutefois, la base de données locale est maintenant remplie avec des données qui peuvent être utilisées dans un scénario hors connexion.

Mise à jour de l’application pour se déconnecter du backend

Dans cette section, vous rompez la connexion avec votre backend d’application mobile afin de simuler un scénario hors connexion. Lorsque vous ajouterez des éléments de données, votre gestionnaire d’exceptions signalera que l’application est en mode hors connexion. Dans cet état, les nouveaux éléments ajoutés au magasin local seront synchronisés avec le backend de l’application mobile lors de la prochaine opération Push en état connecté.

  1. Modifiez App.xaml.cs dans le projet partagé. Mettez en commentaire l’initialisation de MobileServiceClient et ajoutez les lignes suivantes qui utilisent une URL d’application mobile incorrecte :

      public static MobileServiceClient MobileService = new MobileServiceClient("https://your-service.azurewebsites.fail");
    

    Vous pouvez également illustrer le comportement en mode hors connexion en désactivant les réseaux Wi-Fi et cellulaire sur l’appareil ou utiliser le mode avion.

  2. Appuyez sur F5 pour générer et exécuter l’application. Notez que la synchronisation a échoué lors de l’actualisation au lancement de l’application.

  3. Entrez de nouveaux éléments et notez que l’envoi (push) échoue avec l’état CancelledByNetworkError chaque fois que vous cliquez sur Enregistrer. Cependant, les nouveaux éléments todo existent dans le magasin local tant qu’ils ne sont pas transmis au backend d’application mobile. Dans une application de production, si vous supprimez ces exceptions, l’application cliente se comporte comme si elle est encore connectée au backend de l’application mobile.

  4. Fermez l'application et redémarrez-la pour vérifier que les nouveaux élément que vous avez créés sont conservés dans le magasin local.

  5. (Facultatif) Dans Visual Studio, ouvrez l’ Explorateur de serveurs. Accédez à votre base de données dans lesbases de données Azure-SQL>. Cliquez avec le bouton droit sur votre base de données, puis sélectionnez Ouvrir dans l’Explorateur d’objets SQL Server. Maintenant, vous pouvez accéder à votre table de base de données SQL et à son contenu. Vérifiez que les données dans la base de données backend n’ont pas changé.

  6. (Facultatif) Utilisez un outil REST tel que Fiddler ou Postman pour interroger votre serveur principal mobile, à l’aide d’une requête GET au format https://<your-mobile-app-backend-name>.azurewebsites.net/tables/TodoItem.

Mettre à jour l’application pour la reconnecter à votre backend d’applications mobiles

Dans cette section, vous reconnectez l’application au backend d’application mobile. Ces modifications simulent une reconnexion du réseau sur l’application.

Lors de la première exécution de l’application, le gestionnaire d’événements OnNavigatedTo appelle InitLocalStoreAsync. Cette méthode appelle ensuite SyncAsync pour permettre la synchronisation de votre magasin local avec la base de données du backend. L’application fait une tentative de synchronisation au démarrage.

  1. Ouvrez App.xaml.cs dans le projet partagé, et supprimez les commentaires de votre précédente initialisation de MobileServiceClient pour utiliser la bonne URL de l’application mobile.

  2. Appuyez sur F5 pour régénérer et exécuter l'application. L’application synchronise vos modifications locales sur le backend d’application mobile Azure par des opérations Push et Pull lorsque le gestionnaire d’événements OnNavigatedTo s’exécute.

  3. (Facultatif) Affichez les données mises à jour à l’aide de l’Explorateur d’objets SQL Server ou d’un outil REST tel que Fiddler. Notez que les données ont été synchronisées entre la base de données du backend d’application mobile Azure et le magasin local.

  4. Dans l'application, cochez la case en regard de quelques éléments pour les exécuter dans le magasin local.

    UpdateCheckedTodoItem appelle SyncAsync pour synchroniser chaque élément complété avec le serveur principal d’applications mobiles. SyncAsync appelle des opérations Push et Pull. Toutefois, chaque fois que vous exécutez une opération Pull sur une table modifiée par le client, une opération push préalable est effectuée automatiquement. Ce comportement garantit la cohérence de toutes les tables dans le magasin local, mais aussi des relations. Il peut entraîner un push inattendu. Pour plus d’informations, consultez la page Synchronisation des données hors connexion dans Azure Mobile Apps.

Synthèse d’API

Pour pouvoir prendre en charge les fonctionnalités hors connexion des services mobiles, nous avons utilisé l’interface IMobileServiceSyncTable et initialisé MobileServiceClient.SyncContext avec une base de données SQLite locale. Lorsque vous êtes hors connexion, Les opérations normales de création, lecture, mise à jour et suppression pour Mobile Apps fonctionnent comme si l’application était toujours connectée, mais toutes les opérations se rapportent au magasin local. Les méthodes suivantes servent à synchroniser le magasin local avec le serveur :

  • PushAsync Cette méthode étant membre de IMobileServicesSyncContext, les modifications sur toutes les tables sont envoyées au backend par push. Seuls les enregistrements avec des modifications locales sont envoyés au serveur.
  • PullAsync Une opération Pull est démarrée à partir une IMobileServiceSyncTable. Lorsque les modifications sont suivies dans une table, une opération Push implicite est exécutée pour s’assurer de la cohérence de toutes les tables du magasin local et des relations. Le paramètre pushOtherTables contrôle si d’autres tables dans le contexte sont envoyées par une opération Push implicite. Le paramètre de requête prend une chaîne de requête IMobileServiceTableQuery<T> ou OData pour filtrer les données retournées. Le paramètre queryId est utilisé pour définir la synchronisation incrémentielle. Pour plus d’informations, consultez La synchronisation des données hors connexion dans Azure Mobile Apps.
  • PurgeAsync Votre application doit appeler régulièrement cette méthode pour vider les données obsolètes du magasin local. Utilisez le paramètre force lorsque vous avez besoin de vider toutes les modifications qui n’ont pas encore été synchronisées.

Pour plus d’informations sur ces concepts, consultez la page Synchronisation des données hors connexion dans Azure Mobile Apps.

Plus d’informations

Les rubriques suivantes fournissent des informations générales supplémentaires sur la fonctionnalité de synchronisation hors connexion de Mobile Apps :