Compartilhar via


Passo a passo: executando a sincronização

Nos dois passo a passo anteriores, você preparou o banco de dados servidor SyncDB e o banco de dados compacto SyncCompactDB para sincronização. Neste passo a passo, você criará um aplicativo de console que inicia o processo de sincronização entre esses dois bancos de dados. Para obter mais detalhes técnicos sobre o provisionamento de servidores/clientes e a execução do processo de sincronização, consulte Como configurar e executar a sincronização de bancos de dados (SQL Server).

Para executar a sincronização

  1. No Visual Studio, no Gerenciador de Soluções, clique com o botão direito do mouse em Solução ‘SyncSQLServerAndSQLCompact’, aponte para Adicionar e clique em Novo Projeto.

  2. Selecione Visual C# em Tipos de Projeto e selecione Aplicativo do Console em Modelos.

  3. Digite ExecuteCompactSync para nome do projeto.

  4. Clique em OK para fechar a caixa de diálogo Novo Projeto.

  5. Na janela Gerenciador de Soluções, clique com o botão direito do mouse em ExecuteCompactSync e clique em Adicionar Referência.

  6. Selecione Microsoft.Synchronization, Microsoft.Synchornization.Data, Microsoft.Synchronization.Data.SqlServer, Microsoft.Synchronization.Data.SqlServerCe e clique em OK para fechar a caixa de diálogo Adicionar Referência.

  7. Repita as duas etapas anteriores para adicionar uma referência ao assembly System.Data.SqlServerCe.

  8. Adicione as instruções using a seguir ao início do arquivo Program.cs após as instruções using existentes.

    using System.Data;
    using System.Data.SqlClient;
    using System.Data.SqlServerCe;
    
    using Microsoft.Synchronization;
    using Microsoft.Synchronization.Data;
    using Microsoft.Synchronization.Data.SqlServer;
    using Microsoft.Synchronization.Data.SqlServerCe;
    
  9. Adicione a instrução a seguir ao método Main para criar uma conexão SQL com o banco de dados compacto.

    // create a connection to the SyncCompactDB database
    SqlCeConnection clientConn = new SqlCeConnection(@"Data Source='C:\SyncSQLServerAndSQLCompact\SyncCompactDB.sdf'");
    
  10. Adicione a instrução a seguir ao método Main para criar uma conexão SQL com o banco de dados servidor.

    // create a connection to the SyncDB server database
    SqlConnection serverConn = new SqlConnection("Data Source=localhost; Initial Catalog=SyncDB; Integrated Security=True");
    

    Importante

    Na instrução anterior, substitua o nome do servidor pelo nome da instância do seu servidor, caso não esteja usando a instância padrão. Por exemplo: se o nome de sua instância do SQL Server for MYSQLINSTANCE, substitua (local) por .\MYSQLINSTANCE.

  11. Adicione o código a seguir ao método Main para criar um orquestrador de sincronização, que inicia e contra sessões de sincronização. O orquestrador de sincronização contém dois provedores de sincronização que participarão de uma sessão de sincronização. Em nosso cenário, você precisará usar um objeto de provedor para o banco de dados servidor e um objeto de provedor para o banco de dados cliente compacto. Etapas de alto nível para criar um orquestrador para este cenário:

    1. Crie uma instância da classe SyncOrchestrator. A classe SyncOrchestrator inicia e controla sessões de sincronização.

    2. Defina o provedor local do objeto do orquestrador de sincronização para um objeto SqlCeSyncProvider associado ao banco de dados cliente SyncCompactDB. A classe SqlCeSyncProvider encapsula um provedor de sincronização para o SQL Server Compact que se comunica com o cliente e protege o orquestrador de sincronização contra a implementação específica do banco de dados cliente.

    3. Defina o provedor remoto do orquestrador de sincronização para um objeto SqlSyncProvider associado ao banco de dados servidor SyncDB. A classe SqlSyncProvider representa um provedor de sincronização que se comunica com um banco de dados SQL Server e protege outros componentes do Sync Framework contra a implementação específica do banco de dados.

    4. Defina a direção da sincronização do objeto do orquestrador de sincronização como UploadAndDownload para que o cliente possa baixar/carregar as alterações de/para o servidor.

    // create the sync orhcestrator
    SyncOrchestrator syncOrchestrator = new SyncOrchestrator();
    
    // set local provider of orchestrator to a CE sync provider associated with the 
    // ProductsScope in the SyncCompactDB compact client database
    syncOrchestrator.LocalProvider = new SqlCeSyncProvider("ProductsScope", clientConn);
    
    // set the remote provider of orchestrator to a server sync provider associated with
    // the ProductsScope in the SyncDB server database
    syncOrchestrator.RemoteProvider = new SqlSyncProvider("ProductsScope", serverConn);
    
    // set the direction of sync session to Upload and Download
    syncOrchestrator.Direction = SyncDirectionOrder.UploadAndDownload;
    
  12. Adicione o código a seguir para assinar eventuais erros que ocorram durante a aplicação de alterações feitas no cliente. O evento ApplyChangeFailed será gerado quando uma linha não puder ser aplicada a um cliente. Você definirá o manipulador do evento de erro mais tarde neste passo a passo.

    // subscribe for errors that occur when applying changes to the client
    ((SqlCeSyncProvider)syncOrchestrator.LocalProvider).ApplyChangeFailed += new EventHandler<DbApplyChangeFailedEventArgs>(Program_ApplyChangeFailed);
    
  13. Adicione o código a seguir ao método Main. Esse código invoca o método Synchronize()()()() no objeto SyncOrchestrator para iniciar o processo de sincronização entre o banco de dados servidor SyncDB e o banco de dados compacto SyncCompactDB.

    // execute the synchronization process
    SyncOperationStatistics syncStats = syncOrchestrator.Synchronize();
    
  14. Adicione as instruções a seguir ao método Main para exibir as estatísticas retornadas pelo método Synchronize()()()(). O objeto SyncOperationStatistics retornado por esse método contém estatísticas sobre a sessão de sincronização que foi executada.

    // print statistics
    Console.WriteLine("Start Time: " + syncStats.SyncStartTime);
    Console.WriteLine("Total Changes Uploaded: " + syncStats.UploadChangesTotal);
    Console.WriteLine("Total Changes Downloaded: " + syncStats.DownloadChangesTotal);
    Console.WriteLine("Complete Time: " + syncStats.SyncEndTime);
    Console.WriteLine(String.Empty);
    
  15. Adicione o método do manipulador de eventos a seguir à classe Program depois do método Main para manipular o evento ApplyChangeFailed. O parâmetro DbApplyChangeFailedEventArgs fornece informações sobre o erro ou o conflito que provocou a falha. Em um manipulador do evento, você pode responder ao evento de várias maneiras, inclusive especificando se o provedor de sincronização deve tentar aplicar a linha novamente. A propriedade Error do objeto contém metadados sobre todas as exceções ocorridas durante a sincronização. O código de exemplo a seguir exibe esse erro e o tipo de conflito (do tipo DbConflictType) ocorrido durante a sincronização.

    static void Program_ApplyChangeFailed(object sender, DbApplyChangeFailedEventArgs e)
    {
        // display conflict type
        Console.WriteLine(e.Conflict.Type);
    
        // display error message 
        Console.WriteLine(e.Error);
    }
    
  16. No Gerenciador de Soluções, clique com o botão direito do mouse em ExecuteCompactSync e clique em Compilar.

  17. No Gerenciador de Soluções, clique com o botão direito do mouse em ExecuteCompactSync novamente e clique em Definir como Projeto de Inicialização.

    Aviso

    Se você não executar esta etapa e pressionar Ctrl+F5 novamente, o aplicativo ProvisionClient será reexecutado e você obterá uma mensagem de erro sobre o escopo que já existe no banco de dados cliente.

  18. Pressione Ctrl+F5 para executar o programa. A saída deve ter esta aparência:

    Start Time: 6/14/2010 6:24:19 PM
    Total Changes Uploaded: 0
    Total Changes Downloaded: 3
    Complete Time: 6/14/2010 6:24:22 PM
    
    Press any key to continue . . .
    

    Os três registros que estavam na tabela Products dos bancos de dados servidor SyncDB são baixados no cliente compacto.

  19. Pressione ENTER para fechar a janela do prompt de comando.

  20. No SQL Server Management Studio, clique com o botão direito do mouse no nó SQL Server Compact [My Computer\...\SyncCompactDB] e clique em Nova Consulta para abrir uma janela de consulta.

  21. Digite e execute (pressionando F5) o comando SQL a seguir para confirmar se os registros foram realmente baixados no cliente compacto.

    select * from products
    
  22. No SQL Server Management Studio, expanda (local) SQL Server, Bancos de Dados, SyncDB e Tabelas.

  23. Clique com o botão direito do mouse em dbo.Products e clique em Editar 200 Linhas Superiores.

  24. Adicione um registro no final com 4 como ID, Mouse Sem Fio para Nome e 45 para ListPrice. Verifique se o registro foi salvo pressionando TAB após inserir o último valor.

  25. No Visual Studio, pressione Ctrl+F5 para reexecutar o programa cliente. A saída deve ter a aparência a seguir.

    Start Time: 6/14/2010 6:32:44 PM
    Total Changes Uploaded: 0
    Total Changes Downloaded: 1
    Complete Time: 6/14/2010 6:32:47 PM
    
    Press any key to continue . . .
    

    O registro adicionado ao servidor deve ser baixado no cliente agora. Você pode verificar isso usando as etapas a seguir.

  26. No SQL Server Management Studio, selecione o nó SQL Server Compact [My Computer\...\SyncCompactDB].

  27. Clique em Nova Consulta na barra de ferramentas.

  28. Digite e execute (pressionando F5) o comando SQL a seguir para confirmar se os registros foram realmente baixados no cliente compacto.

    select * from products
    
  29. Para familiarizar-se com a tecnologia Sync Framework, você pode adicionar/atualizar/excluir registros do servidor/cliente. Por exemplo, se você excluir um registro do servidor, o registro correspondente no banco de dados cliente deverá ser excluído na próxima sincronização do cliente com o servidor.

  30. Mantenha o Visual Studio e o SQL Server Management Studio abertos se desejar executar o passo a passo depois deste passo a passo no tutorial.

Exemplo de código completo

using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlServerCe;

using Microsoft.Synchronization;
using Microsoft.Synchronization.Data;
using Microsoft.Synchronization.Data.SqlServer;
using Microsoft.Synchronization.Data.SqlServerCe;

namespace ExecuteCompactSync
{
    class Program
    {
        static void Main(string[] args)
        {
            // create a connection to the SyncCompactDB database
            SqlCeConnection clientConn = new SqlCeConnection(@"Data Source='C:\SyncSQLServerAndSQLCompact\SyncCompactDB.sdf'");

            // create a connection to the SyncDB server database
            SqlConnection serverConn = new SqlConnection("Data Source=localhost; Initial Catalog=SyncDB; Integrated Security=True");

            // create the sync orhcestrator
            SyncOrchestrator syncOrchestrator = new SyncOrchestrator();

            // set local provider of orchestrator to a CE sync provider associated with the 
            // ProductsScope in the SyncCompactDB compact client database
            syncOrchestrator.LocalProvider = new SqlCeSyncProvider("ProductsScope", clientConn);
            
            // set the remote provider of orchestrator to a server sync provider associated with
            // the ProductsScope in the SyncDB server database
            syncOrchestrator.RemoteProvider = new SqlSyncProvider("ProductsScope", serverConn);

            // set the direction of sync session to Upload and Download
            syncOrchestrator.Direction = SyncDirectionOrder.UploadAndDownload;

            // subscribe for errors that occur when applying changes to the client
            ((SqlCeSyncProvider)syncOrchestrator.LocalProvider).ApplyChangeFailed += new EventHandler<DbApplyChangeFailedEventArgs>(Program_ApplyChangeFailed);

            // execute the synchronization process
            SyncOperationStatistics syncStats = syncOrchestrator.Synchronize();

            // print statistics
            Console.WriteLine("Start Time: " + syncStats.SyncStartTime);
            Console.WriteLine("Total Changes Uploaded: " + syncStats.UploadChangesTotal);
            Console.WriteLine("Total Changes Downloaded: " + syncStats.DownloadChangesTotal);
            Console.WriteLine("Complete Time: " + syncStats.SyncEndTime);
            Console.WriteLine(String.Empty);
        }

        static void Program_ApplyChangeFailed(object sender, DbApplyChangeFailedEventArgs e)
        {
            // display conflict type
            Console.WriteLine(e.Conflict.Type);

            // display error message 
            Console.WriteLine(e.Error);
        }
    }
}

Consulte também

Outros recursos

Como configurar e executar a sincronização de bancos de dados (SQL Server)