Tutorial: Crear una aplicación de Smart Device que se conecta ocasionalmente

Actualización: Julio de 2008

En este tutorial se proporcionan instrucciones paso a paso para configurar la sincronización de datos en una aplicación de Smart Device que se conecta ocasionalmente. La aplicación de ejemplo agrega un cliente a la memoria caché de base de datos local y sincroniza los cambios con una base de datos remota. También muestra los datos del cliente en un formulario Windows Forms: esto permite comprobar que la sincronización se ha realizado correctamente.

En este tutorial realizará los siguientes pasos:

  • Crear una nueva aplicación de Smart Device.

  • Agregar una nueva biblioteca de servicios de Windows Communication Foundation (WCF) que actúa como nivel intermedio entre la memoria caché de base de datos local y la base de datos remota.

    Nota:

    La biblioteca de servicios de nivel intermedio resulta necesaria porque Synchronization Services para ADO.NET (Dispositivos) no admite la sincronización directa de 2 niveles.

  • Agregar una nueva Caché de base de datos local al proyecto.

  • Configurar los valores de sincronización.

  • Configurar e iniciar el servicio WCF.

  • Agregar funcionalidad de sincronización a la aplicación para dispositivos.

  • Probar la aplicación.

Requisitos previos

Para completar este tutorial, debe:

Crear la aplicación de Smart Device

Nota:

Es posible que su equipo muestre nombres o ubicaciones diferentes para algunos de los elementos de la interfaz de usuario de Visual Studio incluidos en las instrucciones siguientes. La edición de Visual Studio que se tenga y la configuración que se utilice determinan estos elementos. Para obtener más información, vea Valores de configuración de Visual Studio.

Para crear un proyecto en el equipo de escritorio

  1. En el menú Archivo, cree un nuevo proyecto que utilice Visual Basic o Visual C#.

    Nota:

    En los proyectos de Visual Basic y C# se admite el cuadro de diálogo Configurar sincronización de datos. Por tanto, asegúrese de seleccionar uno de estos lenguajes.

  2. Asigne a la solución el nombre Walkthrough y al proyecto el nombre OCSDeviceApp.

  3. En Tipos de proyecto, haga clic en Smart Device y, a continuación, en la plantilla Proyecto de Smart Device.

  4. Haga clic en Aceptar.

    Aparecerá el cuadro de diálogo Agregar nuevo proyecto de Smart Device. De forma predeterminada, se seleccionan el sistema operativo de destino Windows Mobile 5.0 Pocket PC SDK, la versión 3.5 de .NET Compact Framework y la plantilla Aplicación de dispositivo.

  5. Haga clic en Aceptar.

    El proyecto OCSDeviceApp se crea y se agrega al Explorador de soluciones.

Crear un servicio WCF

A diferencia de las aplicaciones de escritorio, la memoria caché de base de datos local de SQL Server Compact no puede sincronizar directamente con la base de datos remota de SQL Server en los proyectos de Smart Device. Debe crear una biblioteca de servicios de WCF que actúe como nivel intermedio entre ambas bases de datos. La aplicación para dispositivos utiliza servicios expuestos por el servicio WCF para la sincronización.

Para agregar una biblioteca de servicios de WCF a la solución

  1. En el menú Archivo, elija Agregar y, a continuación, haga clic en Nuevo proyecto.

  2. Dé al proyecto el nombre MiddleTierServiceLibrary.

  3. Haga clic en WCF bajo Tipos de proyecto, seguido de la plantilla Biblioteca de servicios WCF.

  4. Haga clic en Aceptar.

    El proyecto MiddleTierServiceLibrary se crea y se agrega al Explorador de soluciones.

Agregar una memoria caché de base de datos local

  • A diferencia de las aplicaciones de escritorio, la plantilla Caché de base de datos local no está disponible en el cuadro de diálogo Agregar nuevo elemento de un proyecto para Smart Device. En su lugar, debe agregar una memoria caché de base de datos local al proyecto de WCF o servicio web de nivel intermedio.

Para agregar una memoria caché de base de datos local a un proyecto

  1. Haga clic con el botón secundario en el proyecto MiddleTierServiceLibrary, elija Agregar y, a continuación, haga clic en Nuevo elemento.

  2. Haga clic en la plantilla Caché de base de datos local y escriba NorthwindCache.sync en el cuadro Nombre.

  3. Haga clic en Add.

    Se agregará un archivo NorthwindCache.sync al Explorador de soluciones y aparecerá el cuadro de diálogo Configurar sincronización de datos. NorthwindCache.sync almacena información de configuración de sincronización.

Configurar los valores de sincronización

Para crear conexiones de datos a las bases de datos servidor y cliente

  1. Utilice el cuadro de diálogo Configurar sincronización de datos para crear una conexión a la base de datos Northwind que instaló como requisito previo de este tutorial. Esta es la base de datos remota externa a la aplicación de Smart Device. Puede seleccionar una Conexión de servidor existente a la base de datos Northwind de SQL Server o bien, si no existe ninguna conexión, haga clic en Nuevo para crear una nueva conexión a la base de datos Northwind de SQL Server.

    Nota:

    Puede habilitar el seguimiento de cambios de SQL Server, pero solo después de configurar el servidor de bases de datos remoto para conectar a una base de datos de SQL Server 2008. Para obtener más información, vea Cómo: Configurar la sincronización de datos para usar el seguimiento de cambios de SQL Server.

  2. Acepte el valor predeterminado Northwind.sdf (nueva) para la Conexión de cliente. El cuadro de diálogo Configurar sincronización de datos crea una nueva base de datos SQL Server Compact 3.5 y la agrega al proyecto. Para obtener más información sobre las opciones de conexión de datos disponibles, vea Cómo: Crear una conexión de datos a la base de datos Northwind.

    Después de seleccionar la conexión al servidor, el cuadro de diálogo Configurar sincronización de datos consulta la base de datos remota del servidor para obtener una lista de las tablas disponibles. Este cuadro de diálogo también habilita el botón Agregar, pero solo una vez recuperada la lista de tablas disponibles.

    Nota:

    Observe que el botón Aceptar no está habilitado al concluir este paso. Esto se debe a que no se ha seleccionado ninguna tabla para sincronización. En la sección siguiente se explica cómo agregar tablas.

Para agregar y configurar tablas de modo que se almacenen en la memoria caché local

  1. Haga clic en Agregar para abrir el cuadro de diálogo Configurar tablas para usarlas sin conexión.

  2. Seleccione la tabla Customers.

    Nota:

    Puede modificar el comportamiento de sincronización predeterminado en cada tabla que selecciona en el cuadro de diálogo Configurar tablas para usarlas sin conexión. Para obtener más información, vea Cómo: Configurar la sincronización de datos en una aplicación.

  3. Acepte los valores de columna y tabla predeterminados. Haga clic en Aceptar. El cuadro de diálogo Configurar sincronización de datos creará columnas de seguimiento y una tabla de elementos eliminados.

    La tabla Customers se agregará a la lista Tablas en caché.

Para dividir los componentes de sincronización entre los proyectos de servidor y cliente

  1. En el cuadro de diálogo Configurar sincronización de datos, haga clic en Avanzadas.

  2. En el menú desplegable Ubicación del proyecto de cliente , seleccione OCSDeviceApp.

  3. Haga clic en Aceptar.

    Los componentes se dividirán entre el proyecto de cliente y el proyecto de servidor, una vez configurada la sincronización de datos. Mientras tanto, aparece el cuadro de diálogo Generar scripts SQL. De forma predeterminada, genera scripts que mantienen las columnas de seguimiento y las tablas de elementos eliminados y actualizados en la base de datos servidor.

  4. Haga clic en Aceptar.

    Los scripts SQL generados se guardan en el proyecto de servidor. La base de datos cliente Northwind.sdf se crea en el proyecto de cliente y se sincroniza por primera vez con la base de datos servidor.

  5. Cuando aparezca el Asistente para la configuración de orígenes de datos, seleccione la tabla Customers.

  6. Haga clic en Finalizar.

  7. NorthwindDataSet.xsd se agrega al proyecto cliente y se cierran todos los cuadros de diálogo.

Ahora que se ha configurado la sincronización, se agregan los siguientes elementos al proyecto de cliente:

Item

Descripción

Northwind.sdf

  • Un archivo de base de datos local que contiene los datos almacenados en la memoria caché de SQL Server.

NorthwindCache.Client.sync

  • Un archivo XML que contiene la información de configuración de la sincronización. Haga doble clic en este archivo para abrir el cuadro de diálogo Configurar sincronización de datos.

NorthwindCache.Client.Designer.cs (o .vb)

Un archivo de código que contiene definiciones para el proveedor de sincronización de cliente y el agente de sincronización. También contiene las tablas de sincronización de la base de datos local. Para obtener más información, vea Architecture and Classes for Client and Server Synchronization.

NorthwindDataSet.xsd

  • El conjunto de datos con tipo generado por el Asistente para la configuración de orígenes de datos. Este conjunto de datos contiene una tabla Customers que se rellena con datos almacenados en la base de datos local.

References\Microsoft.Synchronization.Data

References\Microsoft.Synchronization.Data.SqlServerCe

Referencias necesarias a Microsoft Synchronization Services para ADO.NET.

Los elementos siguientes se agregan al proyecto de servidor:

Item

Descripción

NorthwindCache.sync

Un archivo XML que contiene la información de configuración de la sincronización. Haga doble clic en este archivo para abrir el cuadro de diálogo Configurar sincronización de datos.

NorthwindCache.Designer.cs (o .vb)

Contiene definiciones para el proveedor de sincronización con el servidor y el adaptador de sincronización para la base de datos servidor. Para obtener más información, vea Architecture and Classes for Client and Server Synchronization.

NorthwindCache.SyncContract.cs (o .vb)

Un archivo de código que contiene la definición del contrato de WCF y su implementación.

Carpeta SQLScripts

Una carpeta de scripts. Los scripts de esta carpeta se utilizan para realizar el seguimiento de los cambios de la base de datos en el servidor. Algunos scripts de esta carpeta crean las columnas de seguimiento y la tabla de elementos eliminados. Otros scripts crean los desencadenadores que realizan el seguimiento de los cambios en el servidor.

Nota:
Los scripts SQL solo se crean si se requieren modificaciones en el servidor. Si el servidor ya tiene una tabla de elementos eliminados y columnas de seguimiento, no se creará ningún script.

Carpeta SQLUndoScripts

Los scripts de esta carpeta eliminan las columnas de seguimiento, la tabla de elementos y cualquier desencadenador que se utilice para realizar el seguimiento de los cambios de la base de datos en el servidor y para responder a ellos. Utilice estos scripts para deshacer los cambios realizados por el cuadro de diálogo Configurar sincronización de datos en la base de datos.

Nota:
Los scripts SQL solo se crean si se requieren modificaciones en el servidor. Si el servidor ya tiene una tabla de elementos eliminados y columnas de seguimiento, no se creará ningún script.

References\Microsoft.Synchronization.Data

References\Microsoft.Synchronization.Data.Server

Referencias necesarias a Microsoft Synchronization Services para ADO.NET.

Configurar e iniciar el servicio WCF

Para configurar el servicio WCF (NorthwindCacheSyncService) que genera el cuadro de diálogo Configurar sincronización de datos

  1. En el Explorador de soluciones, haga doble clic en NorthwindCache.SyncContract.cs (o .vb) para abrir el archivo en el Editor de código.

  2. Agregue el atributo XmlSerializerFormat() justo antes de la definición INorthwindSyncContract. Debe aparecer el Editor de código:

    [ServiceContractAttribute()]
    [XmlSerializerFormat()]
    public interface INorthwindCacheSyncContract {
    <ServiceContractAttribute()> _
    <XmlSerializerFormat()> _
    Public Interface INorthwindCacheSyncContract
    
  3. En el Explorador de soluciones, haga doble clic en App.config.

  4. Realice las siguiente modificaciones de XML en el archivo App.config. Estos cambios configuran el proyecto para hospedar el servicio NorthwindCacheSyncService que genera el cuadro de diálogo Configurar sincronización de datos en lugar del servicio predeterminado (Service1) que genera la plantilla de proyecto de WCF.

    1. Cambie <service name="MiddleTierServiceLibrary.Service1" behaviorConfiguration="MiddleTierServiceLibrary.Service1Behavior"> a <service name="MiddleTierServiceLibrary.NorthwindCacheSyncService" behaviorConfiguration="MiddleTierServiceLibrary.NorthwindCacheSyncServiceBehavior">

    2. Cambie <add baseAddress="https://localhost:8731/Design_Time_Addresses/MiddleTierServiceLibrary/Service1/" /> a <add baseAddress="http://<your computer name>:8731/NorthwindCacheSyncService/" />

    3. Cambie <endpoint address="" binding="wsHttpBinding" contract="MiddleTierServiceLibrary.IService1"> a <endpoint address="" binding="basicHttpBinding" contract="MiddleTierServiceLibrary. INorthwindCacheSyncContract">

      Nota:

      wsHttpBinding no se admite en dispositivos.

    4. Cambie <dns value="localhost"/> a <dns value="<your computer name>"/>

    5. Cambie <behavior name="MiddleTierServiceLibrary.Service1Behavior"> a <behavior name="MiddleTierServiceLibrary.NorthwindCacheSyncServiceBehavior">

  5. Haga clic con el botón secundario en MiddleTierServiceLibrary en el Explorador de soluciones y haga clic en Establecer como proyecto de inicio.

  6. Para iniciar el servicio WCF, haga clic en Iniciar sin depurar en el menú Depurar.

    Aparecerá el cuadro de diálogo Implementar OCSDeviceApp.

  7. Haga clic en Cancelar y, a continuación, en Sí para continuar.

    Nota:

    Solo está iniciando el servicio WCF: todavía no se requiere el emulador de dispositivos.

    Se inicia el Host de servicio WCF (aparece un icono en el área de notificación), que hospeda el servicio. Aparece el Cliente de prueba WCF que permite probar el servicio.

Codificar las características de sincronización en la aplicación de Smart Device

En los pasos anteriores se configuraron las opciones de sincronización de datos. Además, debe agregar la funcionalidad de sincronización a la aplicación de Smart Device.

Agregar una referencia web del proyecto al servicio WCF

  1. En el Explorador de soluciones, haga clic con el botón secundario en OCSDeviceApp y, a continuación, haga clic en Agregar referencia web.

    Aparece el cuadro de diálogo Agregar referencia Web.

  2. Escriba la dirección de NorthwindCacheSyncService en el cuadro Dirección URL y haga clic en Ir.

    Una vez localizado el servicio web NorthwindCacheSyncService, se habilita el botón Agregar referencia.

    Nota:

    La dirección del servicio se puede encontrar en el archivo App.config.

  3. Dé a la referencia web el nombre NorthwindCacheWebRef y, a continuación, haga clic en Agregar referencia.

    NorthwindCacheWebRef aparece bajo Referencias web en el Explorador de soluciones. Visual Studio genera el archivo Reference.cs: sin embargo, no podrá ver este archivo en el Explorador de soluciones.

  4. Realice los pasos siguientes para abrir y modificar Reference.cs:

    1. Haga doble clic en NorthwindCacheWebRef para abrirlo en el Explorador de objetos.

    2. Expanda el nodo OCSDeviceApp.NorthwindCacheWebRef.

    3. Haga clic con el botón secundario en NorthwindCacheSyncService y haga clic en Ir a definición.

      Reference.cs se abre en el Editor de código.

    4. Agregue el siguiente código después de la última instrucción using o imports:

      [C#]

      using Microsoft.Synchronization;
      using Microsoft.Synchronization.Data;
      

      [Visual Basic]

      Imports Microsoft.Synchronization.Data
      Imports Microsoft.Synchronization
      
    5. Quite todas las clases y enumeraciones del archivo salvo NorthwindCacheSyncService.

      Nota:

      Los tipos quitados ya están definidos en los espacios de nombres Microsoft.Synchronization y Microsoft.Synchronization.Data recién importados.

Para crear un formulario enlazado a datos que se utiliza para ver datos e iniciar la sincronización

  1. En el Explorador de soluciones, haga doble clic en Form1 para abrir este formulario en el diseñador de Visual Studio.

  2. Arrastre el nodo Customers desde la ventana Orígenes de datos hasta Form1.

En Form1, haga clic en el elemento de menú izquierdo y escriba Sincronizar ahora. Establezca su propiedad Name en SynchronizeMenuItem.

Nota:

El usuario hará clic en Sincronizar ahora para iniciar el proceso de sincronización.

DataGridView muestra la tabla Customers de la memoria caché de base de datos local (la base de datos Northwind.sdf incluida en el proyecto).

Para agregar un cliente a la base de datos Northwind local

  1. En el Explorador de soluciones, haga doble clic en Form1 para abrir este formulario en el diseñador.

  2. Haga clic en el elemento de menú situado en el lado derecho del formulario y escriba Insert Row. Establezca la propiedad Name de este elemento de menú en InsertRowMenuItem.

  3. Haga doble clic en el botón Insert Row para crear un controlador de eventos de clic de menú y abrir el formulario en el Editor de código.

  4. Agregue código para conectar a (e insertar una fila en) la base de datos de SQL Server Compact local.

    Dim conn = New System.Data.SqlServerCe.SqlCeConnection( _
        "Data Source=" + (System.IO.Path.Combine(System.IO.Path.GetDirectoryName( _
            System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase), "Northwind.sdf") + _
        ";Max Database Size=2047"))
    
    Try
        ' Connect to the local database
        conn.Open()
    
        ' Insert a row
        Dim cmd = conn.CreateCommand()
        cmd.CommandText = "INSERT INTO Customers ([CustomerID], [CompanyName]) Values('NEWRW', 'Northwind Traders')"
        cmd.ExecuteNonQuery()
    
    
    Catch ex As Exception
    Finally
        conn.Close()
    End Try
    
    ' Reload the DataSet/Datagrid from the local database
    CustomersTableAdapter.Fill(Me.NorthwindDataSet.Customers)
    
    System.Data.SqlServerCe.SqlCeConnection conn = new System.Data.SqlServerCe.SqlCeConnection(
        ("Data Source=" + (System.IO.Path.Combine(System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase), "Northwind.sdf") + ";Max Database Size=2047")));
    try
    {
        // Connect to the local database
        conn.Open();
        System.Data.SqlServerCe.SqlCeCommand cmd = conn.CreateCommand();
    
        // Insert a row
        cmd.CommandText = "INSERT INTO Customers ([CustomerID], [CompanyName]) Values('NEWRW', 'Northwind Traders')";
        cmd.ExecuteNonQuery();
    }
    
    finally
    {
        conn.Close();
    }
    
    // Reload the DataSet/Datagrid from the local database
    customersTableAdapter.Fill(northwindDataSet.Customers);
    

    InsertRowMenuItem inserta una nueva fila en la tabla Customers de la base de datos local.

    Nota:

    Más adelante, al probar la aplicación, puede comprobar que la nueva fila aparece en la base de datos remota tras la sincronización.

Probar la aplicación

Antes de probar la aplicación, debe conectar y colocar el emulador de dispositivos de destino para que se pueda conectar al servicio NorthwindCacheSyncService.

Para probar la aplicación

  1. En el menú Herramientas, haga clic en Administrador de emuladores de dispositivos (DEM).

    Aparece la ventana DEM con una lista de emuladores disponibles.

  2. Haga clic con el botón secundario en USA Windows Mobile 5.0 Pocket PC R2 Emulator (el dispositivo de destino para OCSWalkthrough) y haga clic en Conectar.

    Aparece el emulador de dispositivos Pocket PC - WM 5.0.

  3. En la ventana DEM, haga clic con el botón secundario en el dispositivo conectado y haga clic en Colocar en la base.

    El Centro de dispositivos de Windows Mobile (Windows Vista) o ActiveSync se conectan al emulador de dispositivos colocado en la base. Si el Centro de dispositivos de Windows Mobile o ActiveSync se ofrecen para configurar dispositivo, haga clic en Conectar sin configurar el dispositivo (Windows Vista) o en Cancelar.

    Nota:

    La conexión a WMDC o ActiveSync permite al emulador tener acceso a NorthwindCacheSyncService, que se ejecuta en el equipo de escritorio. Para que el emulador de dispositivos se conecte, los valores de conexión en WMDC o ActiveSync se deben configurar para permitir las conexiones DMA.

  4. Haga clic con el botón secundario en OCSDeviceApp en el Explorador de soluciones y haga clic en Establecer como proyecto de inicio.

  5. Presione F5 para depurar.

  6. Regrese al formulario en el emulador de dispositivos Pocket PC - WM 5.0 y haga clic en Insert Row. La base de datos local y la base de datos remota ya no están sincronizadas. Sin embargo, en el control Datagrid debe verse una nueva fila.

  7. Haga clic en Sincronizar ahora.

  8. Desde la aplicación que se ejecuta en el emulador de dispositivos, utilice el Explorador de servidores/Explorador de bases de datos (u otra herramienta de administración de bases de datos) para conectar a la base de datos servidor remota y comprobar que existe el nuevo registro.

    1. En el Explorador de servidores/Explorador de bases de datos, busque la tabla Customers del servidor de bases de datos remoto (no la conexión a Northwind.sdf).

    2. Haga clic con el botón secundario en la tabla Customers y, a continuación, haga clic en Mostrar datos de tabla.

    3. Compruebe que existe la nueva fila.

    4. Haga clic con el botón secundario del mouse en la nueva fila y haga clic en Eliminar. Las bases de datos habrán perdido de nuevo la sincronización.

  9. Regrese al formulario en el emulador de dispositivos y haga clic en Sincronizar ahora.

  10. Compruebe que los cambios realizados en la base de datos remota se hayan sincronizado con la base de datos local y que se muestren en la cuadrícula.

  11. Cierre el formulario. (Detenga la depuración.)

Vea también

Tareas

Cómo: Configurar la sincronización de datos en una aplicación

Conceptos

Aplicaciones conectadas ocasionalmente (Dispositivos)

Usar bases de datos de SQL Server Compact 3.5 (Dispositivos)

Información general sobre las aplicaciones conectadas ocasionalmente

Historial de cambios

Fecha

Historial

Motivo

Julio de 2008

Se ha agregado un tema.

Cambio de características de SP1.