Compartilhar via


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

O Sync Services for ADO.NET habilita a sincronização entre um banco de dados de cliente do SQL Server Compact 3.5 SP1 e um banco de dados de servidor ou qualquer outra fonte de dados, como um serviço que fornece preços de ação em XML. Para sincronizar dois bancos de dados, o Sync Services oferece suporte a arquiteturas de duas camadas e de N camadas que usam qualquer banco de dados de servidor para o qual um provedor ADO.NET esteja disponível. Para a sincronização entre um banco de dados do cliente e outros tipos de fontes de dados, o Sync Services 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, com freqüência, há vários clientes que sincronizam com um único servidor. O Sync Services usa um modelo "hub-and-spoke" (como o formato de uma roda de bicicleta). 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 a outros clientes. (Esses são os clientes que não trocam alterações diretamente uns com os outros.)

O Sync Services fornece sincronizações de instantâneo, somente para download, somente para upload e bidirecional:

  • 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 do 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 do 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 Services para sincronização entre cliente e servidor é assimétrica: isso significa que o controle de alterações é embutido no banco de dados do cliente, mas você deve controlar as alterações no armazenamento 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 do cliente e servidor e um conjunto de classes da API Sync Services. 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 do cliente e um banco de dados de servidor.

Exceto pelos dois bancos de dados, todos os itens da ilustração correspondem a classes Sync Services. 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 3.5 SP1. Para os aplicativos de duas camadas, todas as DLLs Sync Services 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 do cliente e o banco de dados do 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.

Arquitetura baseada em serviços

A terceira ilustração mostra uma arquitetura baseada em serviços. Essa arquitetura inclui um banco de dados do cliente, mas não inclui um banco de dados de 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 de serviços e os Adaptadores de serviços geralmente fornecem, como a recuperação de alterações a serem sincronizadas.

Banco de dados do cliente

O banco de dados do cliente para aplicativos Sync Services é o SQL Server Compact 3.5 SP1 Service Pack 1 (SP1) e versões posteriores. O Sync Services fornece uma infra-estrutura para controlar alterações incrementais no banco de dados do cliente. Essa infra-estrutura é 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 Services no banco de dados do 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 do servidor pode ser qualquer banco de dados para o qual um provedor ADO.NET esteja disponível. Se quiser controlar alterações incrementais no banco de dados do servidor, deverá preparar o banco de dados para isso. Para obter mais informações, consulte Controlando alterações no banco de dados do servidor.

Classes do Sync Services

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 do cliente.

  • Chama o provedor de sincronização do servidor para recuperar e aplicar as alterações no banco de dados do 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 do cliente. O Sync Services inclui um provedor para o banco de dados SQL Server Compact 3.5 SP1. As principais atividades do provedor de sincronização do cliente são:

  • Armazena informações sobre as tabelas no cliente 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 do cliente.

  • Detecta alterações em conflito.

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 do 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 do servidor.

  • Detecta alterações em conflito.

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

Projetado depois do adaptador de dados em ADO.NET, o adaptador de sincronização é definido para cada tabela que é sincronizada. O adaptador de sincronização fornece o provedor de sincronização de servidor com os comandos específicos exigidos para interagir com o banco de dados do servidor, como o InsertCommand que aplica inserções a partir do banco de dados do cliente no banco de dados do servidor. Uma vez que os adaptadores de sincronização usam o objeto ADO.NET DbCommand, você pode usar qualquer estrutura de comando suportada pelo ADO.NET. Isso inclui Transact-SQL embutido, procedimentos armazenados, exibições, funções, etc. Os comandos só exigem um único resultado que define que a estrutura e os dados sejam 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 do 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 do 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 do 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 do 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 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 (Sync Services).

Consulte também

Conceitos

Cenários offline (Sync Services)
Guia de introdução: Sincronização entre cliente e servidor