Arquitetura e classes para sincronização entre cliente e servidor

O Sync Framework permite a sincronização entre um banco de dados cliente SQL Server Compact e um banco de dados servidor ou qualquer outra fonte de dados, como um serviço que fornece preços de ações em XML. Para sincronizar dois bancos de dados, o Sync Framework oferece suporte a arquiteturas de duas camadas e de N camadas que usam qualquer banco de dados servidor para o qual um provedor ADO.NET esteja disponível. Para a sincronização entre um banco de dados cliente e outros tipos de fontes de dados, o Sync Framework oferece suporte a uma arquitetura baseada em serviços. Essa arquitetura exige mais código do aplicativo do que as arquiteturas de duas camadas e de N camadas; no entanto, não exige que um desenvolvedor faça uma abordagem diferente para a sincronização.

As ilustrações a seguir mostram os componentes envolvidos nas arquiteturas de duas camadas, de N camadas e baseadas em serviços. Cada ilustração mostra um único cliente, mas normalmente há vários clientes que sincronizam com um único servidor. O Sync Framework usa um modelo hub e spoke para a sincronização de bancos de dados cliente e servidor. A sincronização é sempre iniciada pelo cliente. Todas as alterações de cada cliente são sincronizadas com o servidor antes de as alterações serem enviadas do servidor para outros clientes. (Esses são os clientes que não trocam alterações diretamente uns com os outros.)

O Sync Framework fornece sincronizações de instantâneo, somente para download, somente para upload e bidirecional para cenários de cliente e servidor:

  • As sincronizações de instantâneo e somente para download geralmente são usadas para armazenar e atualizar os dados de referência, como uma lista de produtos, em um cliente. As alterações de dados feitas no servidor são baixadas para o banco de dados cliente durante a sincronização. A sincronização de instantâneo atualiza completamente os dados toda vez que o cliente é sincronizado. Isso é adequado quando você não quer controlar alterações incrementais ou o servidor não pode fazê-lo. A sincronização somente para download baixa somente as alterações incrementais ocorridas desde a sincronização anterior.

  • A sincronização somente para upload geralmente é usada para inserir dados, como um pedido de vendas, em um cliente. As inserções e outras alterações em dados feitas no banco de dados cliente são carregadas para o servidor durante a sincronização.

  • A sincronização bidirecional geralmente é usada para dados, como as informações de contato do cliente, que podem ser atualizadas no cliente e servidor. Quaisquer alterações conflitantes devem ser controladas durante a sincronização.

Para obter mais informações sobre os tipos de sincronização, consulte Como especificar sincronização de instantâneo, de download, de carregamento e bidirecional. A arquitetura do Sync Framework para sincronização entre cliente e servidor é assimétrica: isso significa que o controle de alterações é embutido no banco de dados cliente, mas você deverá controlar as alterações no repositório de dados do servidor se quiser que as alterações incrementais sejam baixadas. Para obter mais informações sobre o controle de alterações, consulte Controlando alterações no banco de dados do servidor.

Componentes nas ilustrações de arquitetura

Os componentes nas ilustrações de arquitetura incluem os bancos de dados cliente e servidor e um conjunto de classes da API de sincronização de banco de dados Sync Framework. As arquiteturas de N camadas e baseadas em serviços também incluem componentes de Serviço Web e Transporte que você deve gravar.

Arquitetura de duas camadas

A primeira ilustração mostra como uma arquitetura de duas camadas tem um banco de dados cliente e um banco de dados servidor.

Topologia de sincronização de duas camadas

Exceto pelos dois bancos de dados, todos os itens da ilustração correspondem a classes Sync Framework. Essas classes estão contidas nas seguintes DLLs:

  • Microsoft.Synchronization.Data.dll contém Synchronization Agent, Tabelas de sincronização e Grupos de sincronização.

  • Microsoft. Synchronization.Data.SqlServerCe.dll contém o provedor de sincronização do cliente.

  • Microsoft. Synchronization.Data.Server.dll contém o Provedor de sincronização do servidor e os Adaptadores de sincronização.

Todas as DLLs dependem de System.dll e System.Data.dll a partir de .NET Framework 2.0 ou versões posteriores. Microsoft.Synchronization.Data.SqlServerCe.dll também depende de System.Data.SqlServerCe.dll a partir do SQL Server Compact. Para os aplicativos de duas camadas, todas as DLLs Sync Framework residem no cliente. Para aplicativos de N camadas, Microsoft.Synchronization.Data.dll e Microsoft.Synchronization.Data.Server.dll residem em um computador separado que fornece um serviço de sincronização.

Arquitetura de N camadas

A segunda ilustração mostra uma arquitetura de N camadas. Isso requer um proxy, um serviço e um mecanismo de transporte para se comunicar entre o banco de dados cliente e o banco de dados servidor. Essa arquitetura é mais comum do que uma arquitetura de duas camadas porque uma arquitetura de N camadas não exige uma conexão direta entre os bancos de dados de cliente e servidor.

Topologia de sincronização de N camadas

Arquitetura baseada em serviços

A terceira ilustração mostra uma arquitetura baseada em serviços. Essa arquitetura inclui um banco de dados cliente, mas não inclui um banco de dados servidor nem o Provedor de sincronização de servidor e Adaptadores de sincronização correspondentes. Para usar esse tipo de arquitetura, um aplicativo deve ser capaz de se comunicar com o Synchronization Agent por meio de um proxy e serviços personalizados. Esses devem fornecer a mesma funcionalidade que o provedor de sincronização do servidor e os adaptadores de sincronização geralmente fornecem, como a recuperação de alterações a serem sincronizadas.

Topologia de sincronização baseada em serviços

Banco de dados cliente

O banco de dados cliente para aplicativos do Sync Framework é o SQL Server Compact 3.5 SP1 e versões posteriores, incluindo a versão de 64 bits do SQL Server Compact. O Sync Framework fornece uma infraestrutura para rastrear alterações incrementais no banco de dados cliente. Essa infraestrutura é ativada na primeira vez que qualquer tabela é sincronizada com um método diferente da sincronização de instantâneo. Por padrão, os metadados solicitados pelo Sync Framework no banco de dados cliente são armazenados por 10 dias. Para obter mais informações sobre retenção de metadados, consulte RetentionInDays.

Banco de dados do servidor

O banco de dados servidor pode ser qualquer banco de dados para o qual um provedor ADO.NET esteja disponível. Se você quiser controlar alterações incrementais no banco de dados servidor, prepare o banco de dados para isso. Para obter mais informações, consulte Controlando alterações no banco de dados do servidor.

Classes do Sync Framework

As seguintes classes são representadas na ilustração anterior: SyncAgent, SqlCeClientSyncProvider, DbServerSyncProvider, SyncTable, SyncGroup e SyncAdapter. Para obter um exemplo de como usar essas classes em um aplicativo, consulte Guia de introdução: sincronização entre cliente e servidor.

Synchronization Agent

O Synchronization Agent realiza a sincronização da seguinte forma:

  • Formando um loop em cada uma das tabelas a serem sincronizadas.

  • Chama o provedor de sincronização do cliente para recuperar e aplicar as alterações no banco de dados cliente.

  • Chama o provedor de sincronização do servidor para recuperar e aplicar as alterações no banco de dados servidor.

O Synchronization Agent também mantém as informações de sessão para sincronização e fornece mensagens de êxito, erros e estatísticas para o aplicativo no cliente. Para obter mais informações, consulte SyncAgent e Como especificar sincronização de instantâneo, de download, de carregamento e bidirecional.

Provedor de sincronização do cliente

O provedor de sincronização do cliente se comunica com o cliente e protege o Synchronization Agent da implementação específica do banco de dados cliente. O Sync Framework inclui um provedor para o banco de dados SQL Server Compact. As principais atividades do provedor de sincronização do cliente são:

  • Armazena informações sobre as tabelas no cliente que estão habilitadas para sincronização.

  • Recupera alterações ocorridas no banco de dados do cliente desde a última sincronização.

  • Aplica alterações incrementais no banco de dados cliente.

  • Detecta alterações conflitantes.

Para obter mais informações, consulte SqlCeClientSyncProvider e Como especificar sincronização de instantâneo, de download, de carregamento e bidirecional.

Provedor de sincronização do servidor

O provedor de sincronização do servidor se comunica com o servidor e protege o Synchronization Agent da implementação específica do banco de dados servidor. As principais atividades do provedor de sincronização do servidor são:

  • Armazena informações sobre as tabelas no servidor habilitadas para sincronização.

  • Permite que os aplicativos recuperem as alterações ocorridas no banco de dados do servidor desde a última sincronização.

  • Aplica alterações incrementais no banco de dados servidor.

  • Detecta alterações conflitantes.

Para obter mais informações, consulte DbServerSyncProvider e Como especificar sincronização de instantâneo, de download, de carregamento e bidirecional.

Tabela de sincronização e Grupo de sincronização

Uma tabela sincronização é definida para cada tabela que é sincronizada. Ela armazena as configurações, como a direção da sincronização. Cada cliente pode solicitar apenas as tabelas necessárias. Isso pode não incluir todas as tabelas que o provedor de sincronização do servidor disponibiliza. Por exemplo, pode haver 20 tabelas, 10 das quais estão configuradas para sincronização bidirecional no provedor de sincronização do servidor. Um cliente pode solicitar apenas 12 das tabelas como somente para download. Embora o servidor ofereça suporte a upload, o cliente não tem que fazer alterações nem sincronizar todas as tabelas. Para obter mais informações, consulte SyncTable.

Após a definição de uma tabela de sincronização, ela pode ser adicionada a um grupo de sincronização. Um grupo de sincronização é um mecanismo para garantir a aplicação consistente de alterações em um conjunto de tabelas. Se as tabelas forem incluídas em um grupo de sincronização, as alterações nessas tabelas serão transferidas como uma unidade e aplicadas no servidor em uma única transação. Se qualquer alteração no grupo falhar, as alterações no grupo inteiro serão recuperadas na próxima sincronização. Para obter mais informações, consulte SyncGroup e Como especificar sincronização de instantâneo, de download, de carregamento e bidirecional.

Adaptador de sincronização

Modelado de acordo com o adaptador de dados no ADO.NET, o adaptador de sincronização é definido para cada tabela sincronizada. O adaptador de sincronização fornece ao provedor de sincronização do servidor os comandos específicos que são necessários para interagir com o banco de dados do servidor, como InsertCommand, que aplica inserções do banco de dados do cliente para o banco de dados do servidor. Como os adaptadores de sincronização usam o objeto DbCommand do ADO.NET, você pode usar qualquer estrutura de comando que tenha suporte do ADO.NET. Isso inclui Transact-SQL embutido, procedimentos armazenados, exibições, funções, etc. Os comandos só exigem um único resultado que define a estrutura e os dados a serem transferidos e aplicados. Para obter mais informações, consulte SyncAdapter e Como especificar sincronização de instantâneo, de download, de carregamento e bidirecional.

Proxy, Serviço e Transporte

Proxy, Serviço e Transporte são usados em arquiteturas de N camadas e baseadas em serviços. Em aplicativos de N camadas, Microsoft.Synchronization.Data.Server.dll é usada, mas ela não reside no cliente. Geralmente, a DLL reside em uma camada intermediária que tem uma conexão direta com o banco de dados servidor. Nesse caso, um proxy e serviço são necessários para se comunicar entre o cliente e a camada intermediária:

  • No cliente, o código do aplicativo faz referência a um proxy do provedor de sincronização do servidor (ServerSyncProviderProxy) em vez de fazer referência diretamente ao provedor. O proxy se comunica com um serviço na camada intermediária.

  • Na camada intermediária, o serviço herda de e expõe os mesmos métodos que o ServerSyncProvider (a classe abstrata a partir da qual o DbServerSyncProvider herda). Os métodos do provedor de sincronização do servidor são executados por uma conexão direta com o banco de dados servidor. Os resultados são roteados pela camada intermediária e novamente para o cliente.

Para obter mais informações, consulte Como configurar a sincronização de n camadas.

Em aplicativos baseados em serviços, Microsoft.Synchronization.Data.Server.dll não é usada no cliente. O código do aplicativo deve fornecer a mesma funcionalidade que o provedor de sincronização do servidor e os adaptadores de sincronização geralmente fornecem:

  • No cliente, o código do aplicativo faz referência a um proxy do código de aplicativo que controla as tarefas do provedor de sincronização do servidor, como a recuperação de alterações a partir da fonte de dados. O proxy se comunica com um serviço na camada intermediária.

  • Na camada intermediária, o serviço herda de e expõe os mesmos métodos que o ServerSyncProvider (a classe abstrata a partir da qual o DbServerSyncProvider herda). Os métodos são executados pelo código do aplicativo por uma conexão direta com o banco de dados servidor. Os resultados são roteados pela camada intermediária e novamente para o cliente.

Classes adicionais na API

As ilustrações deste tópico mostram as classes principais na API. No entanto, há várias classes que não são mostradas. Para obter informações sobre todas as classes disponíveis, consulte Microsoft.Synchronization, Microsoft.Synchronization.Data, Microsoft.Synchronization.Data.SqlServerCe e Microsoft.Synchronization.Data.Server. As seções a seguir fornecem introduções a quatro outras classes importantes com as quais você deve se familiarizar.

Âncora de sincronização

Uma âncora de sincronização é um ponto de referência no tempo para um conjunto de tabelas sincronizadas a partir do servidor. As âncoras de sincronização permitem que um aplicativo determine quais alterações devem ser sincronizadas durante uma sessão específica. Durante a sincronização, o provedor de sincronização do cliente armazena os seguintes pontos de referência no banco de dados cliente:

  • Última âncora recebida
    Identifica a última alteração baixada do servidor.
  • Última âncora enviada
    Identifica a última alteração carregada a partir do cliente.

Na próxima sincronização, um aplicativo pode usar essas âncoras para identificar o ponto de partida para sincronizar o próximo conjunto de alterações. Para obter mais informações, consulte SyncAnchor e Controlando alterações no banco de dados do servidor.

Estatísticas da sessão de sincronização

As estatísticas da sessão formam um conjunto de estatísticas que o Synchronization Agent fornece para cada sessão de sincronização. As estatísticas incluem informações sobre os tempos de sincronização, o número de alterações processadas e quaisquer conflitos ou exceções ocorridas. Para obter mais informações, consulte SyncStatistics e Como trabalhar com eventos e com a lógica de negócios do programa.

Variáveis da sessão de sincronização

As variáveis de sessão são variáveis fornecidas para um desenvolvedor usar como parâmetros para os comandos de seleção, inserção, atualização e exclusão executados no servidor. As variáveis podem ser usadas de diversas maneiras: para fornecer suporte à detecção de conflitos e para evitar o download de alterações em um cliente mais de uma vez. Para obter mais informações, consulte SyncSession e Como usar variáveis de sessão.

Construtor do adaptador de sincronização do SQL Server

Projetado depois do construtor de comandos no ADO.NET, o construtor do adaptador de sincronização ajuda a desenvolver um código para os comandos de sincronização executados pelo provedor de sincronização do servidor. O construtor do adaptador de sincronização produz instruções SELECT, INSERT, UPDATE e DELETE para os bancos de dados SQL Server. Essas instruções se baseiam em informações fornecidas sobre as tabelas envolvidas na sincronização. Para obter mais informações, consulte SqlSyncAdapterBuilder e Ferramentas para ajudar no desenvolvimento de aplicativos.

Consulte também

Conceitos

Cenários offline
Guia de introdução: sincronização entre cliente e servidor