Compartir a través de


Habilitación de la sincronización sin conexión para la aplicación de Windows

Información general

En este tutorial se muestra cómo agregar compatibilidad sin conexión a una aplicación para la Plataforma universal de Windows (UWP) mediante un back-end de aplicación móvil de Azure. La sincronización sin conexión permite a los usuarios finales interactuar con una aplicación móvil, ver, agregar o modificar datos, incluso cuando no hay ninguna conexión de red. Los cambios se almacenan en una base de datos local. Una vez que el dispositivo vuelve a estar en línea, estos cambios se sincronizan con el back-end remoto.

En este tutorial, actualizará el proyecto de aplicación para UWP del tutorial Crear una aplicación de Windows para admitir las características sin conexión de Azure Mobile Apps. Si no usa el proyecto de servidor de inicio rápido descargado, debe agregar los paquetes de extensión de acceso a datos al proyecto. Para obtener más detalles sobre los paquetes de extensiones del servidor, consulte Uso del SDK del servidor de back-end .NET para Azure Mobile Apps.

Para más información sobre la característica de sincronización sin conexión, consulte el tema Sincronización de datos sin conexión en Azure Mobile Apps.

Requisitos

Este tutorial requiere los siguientes requisitos previos:

Actualización de la aplicación cliente para admitir características sin conexión

Las características sin conexión de la aplicación móvil de Azure permiten interactuar con una base de datos local cuando se encuentra en un escenario sin conexión. Para usar estas características en la aplicación, inicializas un SyncContext en un almacén local. A continuación, haga referencia a la tabla a través de la interfaz IMobileServiceSyncTable. SQLite se usa como almacén local en el dispositivo.

  1. Instale el entorno de ejecución de SQLite para la Plataforma universal de Windows.

  2. En Visual Studio, abra el administrador de paquetes NuGet para el proyecto de aplicación para UWP que completó en el tutorial Creación de una aplicación de Windows. Busque e instale el paquete NuGet Microsoft.Azure.Mobile.Client.SQLiteStore.

  3. En el Explorador de soluciones, haga clic con el botón derecho en Referencias>Agregar referencia...>Extensiones universales de Windows>y, a continuación, habilite SQLite para la Plataforma universal de Windows y Visual C++ 2015 Runtime para aplicaciones de la Plataforma universal de Windows.

    Agregar referencia de UWP de SQLite

  4. Abra el archivo MainPage.xaml.cs y quite la marca de comentario de la definición de #define OFFLINE_SYNC_ENABLED.

  5. En Visual Studio, presione la tecla F5 para recompilar y ejecutar la aplicación cliente. La aplicación funciona igual que antes de habilitar la sincronización sin conexión. Sin embargo, la base de datos local ahora se rellena con datos que se pueden usar en un escenario sin conexión.

Actualización de la aplicación para desconectar del back-end

En esta sección, interrumpirá la conexión con el back-end de la aplicación móvil para simular una situación sin conexión. Al agregar elementos de datos, el controlador de excepciones le indica que la aplicación está en modo sin conexión. En este estado, los nuevos elementos son agregados en el almacén local y se sincronizarán con el back-end de la aplicación móvil cuando la sincronización se ejecute la próxima vez en un estado conectado.

  1. Edite App.xaml.cs en el proyecto compartido. Convierta en comentario la inicialización del MobileServiceClient y agregue la siguiente línea, que utiliza una URL de aplicación móvil no válida:

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

    También puede demostrar el comportamiento sin conexión deshabilitando las redes wifi y de telefonía móvil en el dispositivo o usando el modo avión.

  2. Presione F5 para compilar y ejecutar la aplicación. Observe que la sincronización no se pudo actualizar cuando se inició la aplicación.

  3. Introduzca nuevos elementos y observe que la inserción falla con un estado de CancelledByNetworkError cada vez que haces clic en Guardar. Sin embargo, los nuevos elementos de tareas pendientes existen en el almacén local hasta que se pueden insertar en el back-end de la aplicación móvil. En una aplicación de producción, si suprime estas excepciones, la aplicación cliente se comporta como si todavía estuviera conectada al back-end de la aplicación móvil.

  4. Cierre la aplicación y reiníciela para comprobar que los nuevos elementos creados se conservan en el almacén local.

  5. (Opcional) En Visual Studio, abra Explorador de servidores. Vaya a la base de datos en Azure>SQL Database. Haga clic con el botón derecho en la base de datos y seleccione Abrir en el Explorador de objetos de SQL Server. Ahora puede explorar la tabla de su base de datos SQL y su contenido. Compruebe que los datos de la base de datos back-end no han cambiado.

  6. (Opcional) Utilice una herramienta REST como Fiddler o Postman para hacer consultas a su backend móvil, usando una consulta GET en el formato https://<your-mobile-app-backend-name>.azurewebsites.net/tables/TodoItem.

Actualiza la aplicación para volver a conectar el backend de la aplicación móvil

En esta sección, volverá a conectar la aplicación al servidor de la aplicación móvil. Estos cambios simulan una reconexión de red en la aplicación.

Cuando se ejecuta por primera vez la aplicación, el controlador de eventos OnNavigatedTo llama a InitLocalStoreAsync. A su vez, este método llama a SyncAsync para sincronizar el almacén local con la base de datos de back-end. La aplicación intenta sincronizarse al iniciarse.

  1. Abra App.xaml.cs en el proyecto compartido y descomente su inicialización anterior de MobileServiceClient para usar la dirección URL correcta de la aplicación móvil.

  2. Presione la tecla F5 para recompilar y ejecutar la aplicación. La aplicación sincroniza los cambios locales con el back-end de la aplicación móvil de Azure mediante operaciones de inserción y extracción cuando se ejecuta el controlador de eventos OnNavigatedTo.

  3. (Opcional) Vea los datos actualizados mediante el Explorador de objetos de SQL Server o una herramienta REST como Fiddler. Observe que los datos se han sincronizado entre la base de datos de back-end de la aplicación móvil de Azure y el almacén local.

  4. En la aplicación, haga clic en la casilla situada junto a algunos elementos para completarlos en la tienda local.

    UpdateCheckedTodoItem llama a SyncAsync para sincronizar cada elemento completado con el back-end de aplicación móvil. SyncAsync llama tanto a empujar como a jalar. Sin embargo, cada vez que se ejecuta un pull en una tabla a la que el cliente ha realizado cambios, un push siempre se ejecuta automáticamente. Este comportamiento garantiza que todas las tablas del almacén local junto con las relaciones sigan siendo coherentes. Este comportamiento puede dar lugar a un empuje inesperado. Para más información sobre este comportamiento, consulte Sincronización de datos sin conexión en Azure Mobile Apps.

Resumen de API

Para admitir las características sin conexión de los servicios móviles, usamos la interfaz IMobileServiceSyncTable e inicializamos MobileServiceClient.SyncContext con una base de datos SQLite local. Cuando está sin conexión, las operaciones CRUD normales para Mobile Apps funcionan como si la aplicación todavía estuviera conectada mientras las operaciones se producen en el almacén local. Los métodos siguientes se usan para sincronizar el almacén local con el servidor:

  • PushAsync Debido a que este método es miembro de IMobileServicesSyncContext, los cambios en todas las tablas se envían al back-end. Solo se envían registros con cambios locales al servidor.
  • PullAsync Se inicia un proceso de extracción desde un IMobileServiceSyncTable. Cuando hay cambios registrados en la tabla, se ejecuta un empuje implícito para asegurarse de que todas las tablas del almacén local, junto con sus relaciones, permanezcan coherentes. El parámetro pushOtherTables controla si se empujan otras tablas en el contexto en un empuje implícito. El parámetro de consulta acepta una IMobileServiceTableQuery<T> o una cadena de consulta OData para filtrar los datos devueltos. El parámetro queryId se usa para definir la sincronización incremental. Para más información, consulte Sincronización de datos sin conexión en Azure Mobile Apps.
  • PurgeAsync La aplicación debe llamar periódicamente a este método para purgar datos obsoletos del almacén local. Utilice el parámetro de fuerza cuando necesite purgar los cambios que aún no se hayan sincronizado.

Para más información sobre estos conceptos, consulte Sincronización de datos sin conexión en Azure Mobile Apps.

Más información

En los temas siguientes se proporciona información adicional sobre la característica de sincronización sin conexión de Mobile Apps: