Arquitectura y clases para la sincronización del cliente y el servidor
Sync Framework habilita la sincronización entre una base de datos cliente de SQL Server Compact y una base de datos servidor o cualquier otro origen de datos, como por ejemplo, un servicio que proporciona las cotizaciones bursátiles en XML. Para sincronizar dos bases de datos, Sync Framework admite las arquitecturas con dos niveles y con n niveles que usen cualquier base de datos servidor para la cual esté disponible un proveedor de ADO.NET. Para la sincronización entre una base de datos cliente y orígenes de datos de otro tipo, Sync Framework admite una arquitectura basada en servicios. Dicha arquitectura requiere más código de aplicación que las arquitecturas de dos niveles y de n niveles; no obstante, no exige al desarrollador adoptar un enfoque diferente a la sincronización.
En las ilustraciones siguientes se muestran los componentes implicados en las arquitecturas de dos niveles, de n niveles y basadas en servicios. En cada ilustración se muestra un solo cliente, aunque con frecuencia se sincronizan varios clientes con el mismo servidor. Sync Framework usa un modelo de concentrador y radio en la sincronización de bases de datos cliente y servidor. La sincronización siempre la inicia el cliente. Todos los cambios de cada cliente se sincronizan con el servidor antes de enviarlos desde este a los demás clientes (estos clientes no intercambian los cambios directamente entre sí).
Sync Framework proporciona una sincronización de instantáneas, una sincronización de solo descarga y una sincronización bidireccional para escenarios de cliente y servidor:
Las sincronizaciones de instantáneas y de solo descarga se utilizan habitualmente para almacenar y actualizar datos de referencia en un cliente, por ejemplo, una lista de productos. Los cambios de los datos efectuados en el servidor se descargan a la base de datos cliente durante la sincronización. La sincronización de instantáneas actualiza completamente los datos cada vez que se sincroniza el cliente. Esto es apropiado si no se desea un seguimiento de los cambios incrementales o si el servidor no puede hacerlo. En una sincronización de sólo descarga, se descargan solamente los cambios incrementales que se hayan producido desde la sincronización anterior.
La sincronización de sólo carga se usa habitualmente para insertar datos en un cliente, por ejemplo, un pedido de venta. Las inserciones y otros cambios de los datos efectuados en la base de datos cliente se cargan al servidor durante la sincronización.
La sincronización bidireccional se usa habitualmente para los datos que, como la información de contacto de los clientes, puede actualizarse tanto en el cliente como en el servidor. Los cambios en conflicto deben controlarse durante la sincronización.
Para obtener más información acerca de los tipos de sincronización, vea Especificar una sincronización de instantáneas, de descarga, de carga y bidireccional. La arquitectura de Sync Framework en la sincronización de cliente y servidor es asimétrica: es decir, el seguimiento de cambios está integrado en la base de datos cliente pero, para que sea posible descargar los cambios incrementales, se debe realizar un seguimiento de cambios en el almacén de datos del servidor. Para obtener más información acerca del seguimiento de cambios, vea Seguimiento de cambios en la base de datos servidor.
Componentes en las ilustraciones de la arquitectura
Los componentes de las ilustraciones de la arquitectura incluyen las bases de datos cliente y servidor y un conjunto de clases de la API de sincronización de bases de datos de Sync Framework. Las arquitecturas de n niveles y arquitecturas basadas en servicios también incluyen los componentes de servicios web y transporte, que debe escribir el desarrollador.
Arquitectura de dos niveles
La primera ilustración muestra una arquitectura de dos niveles que tiene una base de datos cliente y una base de datos servidor.
A excepción de las dos bases de datos, todos los elementos de la ilustración corresponden a clases de Sync Framework. Estas clases están incluidas en las bibliotecas DLL siguientes:
Microsoft.Synchronization.Data.dll contiene el agente de sincronización, las tablas de sincronización y los grupos de sincronización.
Microsoft. Synchronization.Data.SqlServerCe.dll contiene el proveedor de sincronización del cliente.
Microsoft. Synchronization.Data.Server.dll contiene el proveedor de sincronización del servidor y los adaptadores de sincronización.
Todas las DLL dependen de System.dll y System.Data.dll de .NET Framework 2.0 o versiones posteriores. Microsoft.Synchronization.Data.SqlServerCe.dll también depende de System.Data.SqlServerCe.dll de SQL Server Compact. Para las aplicaciones de dos niveles, todas las DLL de Sync Framework residen en el cliente. Para las aplicaciones de n niveles, Microsoft.Synchronization.Data.dll y Microsoft.Synchronization.Data.Server.dll residen en otro equipo, que proporciona un servicio de sincronización.
Arquitectura de n niveles
La segunda ilustración muestra una arquitectura de n niveles, que requiere un proxy, un servicio y un mecanismo de transporte para la comunicación entre la base de datos cliente y la base de datos servidor. Esta arquitectura es más frecuente que una de dos niveles, puesto que una arquitectura de n niveles no requiere una conexión directa entre las bases de datos del cliente y del servidor.
Arquitectura basada en servicios
La tercera ilustración muestra una arquitectura basada en servicios, que incluye una base de datos cliente, pero no una base de datos servidor ni el proveedor de sincronización del servidor y los adaptadores de sincronización correspondientes. Para poder usar una arquitectura de esta clase, una aplicación tiene que poder comunicarse con el agente de sincronización a través de un proxy y un servicio personalizados. Estos deben proporcionar la misma funcionalidad que normalmente ofrecen el proveedor de sincronización del servidor y los adaptadores de sincronización como, por ejemplo, la recuperación de cambios que se deben sincronizar.
Base de datos cliente
La base de datos cliente de las aplicaciones de Sync Framework es SQL Server Compact 3.5 SP1 y versiones posteriores, incluida la versión de 64 bits de SQL Server Compact. Sync Framework proporciona una infraestructura para realizar el seguimiento de los cambios incrementales en la base de datos cliente. Esta infraestructura se habilita la primera vez que se sincroniza una tabla por un método distinto de la sincronización de instantáneas. De forma predeterminada, los metadatos que Sync Framework requiere en la base de datos cliente permanecen almacenados durante 10 días. Para obtener más información acerca de la conservación de metadatos, vea RetentionInDays.
Base de datos servidor
La base de datos servidor puede ser cualquier base de datos para la que esté disponible un proveedor de ADO.NET. Si se desea llevar un seguimiento de los cambios incrementales en la base de datos servidor, debe prepararla para esta operación. Para obtener más información, vea Seguimiento de cambios en la base de datos servidor.
Clases de Sync Framework
En la ilustración anterior se representan las clases siguientes: SyncAgent, SqlCeClientSyncProvider, DbServerSyncProvider, SyncTable, SyncGroup y SyncAdapter. Para obtener un ejemplo de cómo utilizar estas clases en una aplicación, vea Introducción: sincronización de cliente y servidor.
Agente de sincronización
El agente de sincronización controla la sincronización como sigue:
Recorre en bucle todas las tablas que se deben sincronizar.
Invoca al proveedor de sincronización del cliente para que recupere los cambios de la base de datos cliente y los aplique.
A continuación, invoca al proveedor de sincronización del servidor para recuperar y aplicar los cambios en la base de datos servidor.
El agente de sincronización también mantiene información de nivel de la sesión para la sincronización y proporciona correctamente a la aplicación del cliente mensajes, errores y estadísticas. Para obtener más información, vea SyncAgent y Especificar una sincronización de instantáneas, de descarga, de carga y bidireccional.
Proveedor de sincronización del cliente
El proveedor de sincronización del cliente se comunica con el cliente y aísla el agente de sincronización de la implementación específica de la base de datos cliente. Sync Framework incluye un proveedor para la base de datos de SQL Server Compact. Las actividades principales del proveedor de sincronización del cliente son:
Almacena información de las tablas del cliente habilitadas para sincronización.
Recupera los cambios producidos en la base de datos cliente desde la última sincronización.
Aplica los cambios incrementales a la base de datos cliente.
Detecta los cambios en conflicto.
Para obtener más información, vea SqlCeClientSyncProvider y Especificar una sincronización de instantáneas, de descarga, de carga y bidireccional.
Proveedor de sincronización del servidor
El proveedor de sincronización del servidor se comunica con la base de datos servidor y aísla el agente de sincronización de la implementación específica de esa base de datos. Las actividades principales del proveedor de sincronización del servidor son:
Almacena información de las tablas del servidor habilitadas para sincronización.
Permite a las aplicaciones recuperar los cambios producidos en la base de datos servidor desde la última sincronización.
Aplica los cambios incrementales a la base de datos servidor.
Detecta los cambios en conflicto.
Para obtener más información, vea DbServerSyncProvider y Especificar una sincronización de instantáneas, de descarga, de carga y bidireccional.
Tabla de sincronización y grupo de sincronización
Se define una tabla de sincronización para cada tabla que se sincroniza. Contiene los valores de configuración tales como la dirección de la sincronización. Un cliente sólo puede solicitar las tablas que necesite. A causa de esto, puede que no se incluyan todas las tablas que el proveedor de sincronización del servidor pone a su disposición. Por ejemplo, podrían existir 20 tablas en el proveedor de sincronización del servidor, 10 de las cuales están configuradas para la sincronización bidireccional. Un cliente podría solicitar solamente 12 de las tablas como sólo descarga. Aunque el servidor admite la carga, el cliente no tiene que efectuar cambios en todas las tablas ni sincronizarlas. Para obtener más información, vea SyncTable.
Una vez definida una tabla de sincronización, es posible agregarla a un grupo de sincronización. Un grupo de sincronización proporciona un mecanismo para garantizar la coherencia en la aplicación de los cambios para un conjunto de tablas. En caso de incluir tablas en un grupo de sincronización, los cambios en dichas tablas se transfieren como una unidad en el servidor en una única transacción. Si se produce un error en algún cambio incluido en el grupo, los cambios de todo el grupo se reintentarán en la siguiente sincronización. Para obtener más información, vea SyncGroup y Especificar una sincronización de instantáneas, de descarga, de carga y bidireccional.
Adaptador de sincronización
El adaptador de sincronización, que toma como modelo el adaptador de datos de ADO.NET, se define para cada tabla que se sincroniza. El adaptador de sincronización proporciona al proveedor de sincronización del servidor los comandos específicos necesarios para interactuar con la base de datos servidor, como InsertCommand, que aplica a la base de datos servidor las inserciones realizadas en la base de datos cliente. Dado que los adaptadores de sincronización usan el objeto ADO.NET DbCommand, se puede usar cualquier estructura de comandos que sea compatible con ADO.NET. incluidos Transact-SQL insertados, procedimientos almacenados, vistas, funciones, etc. Los comandos solo requieren un resultado individual que defina la estructura y los datos que se van a transferir y aplicar. Para obtener más información, vea SyncAdapter y Especificar una sincronización de instantáneas, de descarga, de carga y bidireccional.
Proxy, servicio y transporte
Se utilizan proxy, servicio y transporte en las arquitecturas de n niveles y las basadas en servicios. En las aplicaciones de n niveles, se usa Microsoft.Synchronization.Data.Server.dll, aunque no reside en el cliente. Habitualmente, la DLL reside en un nivel intermedio conectado directamente con la base de datos servidor. En este caso, se requieren un proxy y un servicio para la comunicación entre el cliente y el nivel intermedio.
En el cliente, el código de la aplicación hace referencia a un proxy del proveedor de sincronización del servidor (ServerSyncProviderProxy), en lugar de hacer referencia directamente al proveedor. El proxy se comunica con un servicio de nivel intermedio.
En el nivel intermedio, el servicio hereda del mismo método que ServerSyncProvider (la clase abstracta de la cual hereda DbServerSyncProvider) y lo expone. Los métodos del proveedor de sincronización del servidor se ejecutan en una conexión directa con la base de datos servidor. Los resultados se enrutan a través del nivel intermedio y regresan al cliente.
Para obtener más información, vea Configurar la sincronización de n niveles.
En las aplicaciones basadas en servicios, no se usa Microsoft.Synchronization.Data.Server.dll en el cliente. El código de la aplicación debe proporcionar la misma funcionalidad que normalmente ofrecen el proveedor de sincronización del servidor y los adaptadores de sincronización:
En el cliente, el código de la aplicación hace referencia a un proxy del código de aplicación que controla las tareas del proveedor de sincronización del servidor, como la recuperación de cambios del origen de datos. El proxy se comunica con un servicio de nivel intermedio.
En el nivel intermedio, el servicio hereda del mismo método que ServerSyncProvider (la clase abstracta de la cual hereda DbServerSyncProvider) y lo expone. El código de la aplicación ejecuta los métodos en una conexión directa con la base de datos servidor. Los resultados se enrutan a través del nivel intermedio y regresan al cliente.
Clases adicionales en la API
En las ilustraciones de este tema se muestran las clases principales de la API. No obstante, hay muchas clases que no se muestran. Para obtener información acerca de todas las clases disponibles, vea Microsoft.Synchronization, Microsoft.Synchronization.Data, Microsoft.Synchronization.Data.SqlServerCe y Microsoft.Synchronization.Data.Server. En las secciones siguientes se ofrece una introducción a cuatro importantes clases que debe conocer.
Delimitador de sincronización
Un delimitador de sincronización es un punto de referencia en el tiempo para un conjunto de tablas que se sincronizan desde el servidor. Los delimitadores de sincronización permiten a una aplicación averiguar qué cambios deben sincronizarse en una sesión determinada. Durante la sincronización, el proveedor de sincronización del cliente almacena los puntos de referencia siguientes en la base de datos cliente:
- Último delimitador recibido
Identifica el último cambio descargado del servidor.
- Último delimitador enviado
Identifica el último cambio cargado desde el cliente.
En la próxima sincronización, estos delimitadores permitirán a las aplicaciones identificar el punto de partida para la sincronización del siguiente conjunto de cambios. Para obtener más información, vea SyncAnchor y Seguimiento de cambios en la base de datos servidor.
Estadísticas de sesión de sincronización
Las estadísticas de sesión son un conjunto de estadísticas proporcionadas por el agente de sincronización para cada sesión de sincronización. Las estadísticas incluyen información del tiempo de sincronización, número de cambios procesados y cualquier conflicto o excepción que se genere. Para obtener más información, vea SyncStatistics y Trabajar con eventos y programar la lógica empresarial.
Variables de sesión de sincronización
Las variables de sesión son variables que se suministran al desarrollador para que éste pueda usarlas como parámetros para ejecutar comandos de selección, inserción, actualización y eliminación en el servidor. Estas variables tienen varias aplicaciones: proporcionar compatibilidad con la detección de conflictos y evitar descargar varias veces los cambios a un cliente. Para obtener más información, vea SyncSession y Usar variables de sesión.
Generador del adaptador de sincronización de SQL Server
El generador del adaptador de sincronización, basado en el generador de comandos de ADO.NET, ayuda a desarrollar el código de los comandos de sincronización que ejecuta el proveedor de sincronización de servidor. El generador del adaptador de sincronización produce instrucciones SELECT, INSERT, UPDATE y DELETE para las bases de datos de SQL Server. Estas instrucciones están basadas en la información que suministra el desarrollador con respecto a las tablas implicadas en la sincronización. Para obtener más información, vea SqlSyncAdapterBuilder y Herramientas que facilitan el desarrollo de aplicaciones.
Vea también
Conceptos
Escenarios sin conexión
Introducción: sincronización de cliente y servidor