Compartilhar via


Implantando e controlando a versão de aplicativos

Este tópico descreve a implantação e o controle de versão de aplicativos de cliente e servidor. Para obter informações sobre a inicialização de bancos de dados de memo nível, consulte "Inicializando um banco de dados de servidor" em Como configurar e executar a sincronização de colaboração (não SQL Server).

O modo como você implanta um aplicativo de cliente e servidor que usa o Sync Framework é diferente se o aplicativo é de duas camadas ou de N camadas. Em um aplicativo de duas camadas, todo o código de sincronização está no cliente, e o aplicativo pode ser implementado como qualquer outro aplicativo com base no SQL Server Compact. Em geral, a implantação envolve o uso do ClickOnce para publicar o aplicativo ou compactá-lo e, em seguida, copiá-lo para cada cliente. Para obter mais informações sobre como implantar os aplicativos que usam o SQL Server Compact, consulte os tópicos "Implantando aplicativos" e "Como criar e implantar um aplicativo para uma área de trabalho" nos Manuais Online do SQL Server Compact. Em um aplicativo de N camadas, você também deve implantar o código no computador que hospeda os componentes de sincronização do servidor.

Criando e inicializando o banco de dados do cliente

Para aplicativos de duas camadas e de N camadas, decida como criar e inicializar o banco de dados do cliente que tem o esquema e os dados que o aplicativo exige. Há duas abordagens principais:

  • Use o Sync Framework para criar o banco de dados e baixe o esquema de tabela e dados durante a primeira sincronização. Essa é a abordagem mais simples. No entanto, pode exigir muito do tráfego de rede e processamento do servidor se você tiver muitos clientes e um conjunto de dados grande.

  • Crie previamente o banco de dados que tem o esquema da tabela e um conjunto de dados inicial. O banco de dados, que está no formato de um arquivo .sdf, pode ser transportado ou baixado pelo aplicativo cliente. Se o aplicativo baixar alterações incrementais, poderá atualizar o banco de dados do cliente durante a primeira sincronização. Se você usar essa abordagem, defina um valor apropriado para a propriedade CreationOption.

    Se o aplicativo incluir carregamentos e você quiser saber onde as alterações se originaram, o aplicativo poderá definir a propriedade ClientId para identificar exclusivamente o banco de dados do cliente no servidor ou o Sync Framework gerará uma nova ID para o banco de dados.

    Dica

    A criação antecipada do banco de dados do cliente não é adequada para aplicativos nos quais os dados são filtrados de maneira diferente para cada cliente. Ela pode causar perda de alterações durante a sincronização inicial.

Para obter mais informações sobre como inicializar o banco de dados do cliente, consulte Como inicializar o banco de dados cliente e trabalhar com esquemas de tabela.

Controle de versão do aplicativo

Depois de um aplicativo ter sido desenvolvido e implantado, novas versões do aplicativo poderão ser desenvolvidas. Há duas áreas a serem consideradas para o controle de versão do aplicativo:

  • As partes do aplicativo afetadas por uma nova versão

  • Se uma nova versão deve coexistir com versões anteriores

Geralmente, um aplicativo de N camadas é mais fácil de atualizar para Sync Framework uma vez que você pode atualizar os componentes do servidor separadamente dos componentes do cliente. Isso permite que você exponha um novo serviço que inclui a funcionalidade atualizada e protege clientes de alterações do servidor até que estejam prontos para atualizações de componentes do cliente.

Controlando a versão de aplicativos de N camadas

Para o Sync Framework, a atualização do aplicativo principal a ser considerada é uma alteração de esquema no banco de dados do servidor. O Sync Framework não propaga automaticamente as alterações de esquema do servidor para o cliente. No entanto, ele dá suporte a alterações de esquema contanto que você atualize as partes adequadas do aplicativo. Para obter uma lista das alterações de esquema com suporte no banco de dados do cliente, consulte Trabalhando com esquemas de tabelas. Se for feita uma alteração de esquema no banco de dados do servidor, primeiro você deve decidir se ela deverá ser propagada para o cliente. Por exemplo, se você adicionar uma coluna de cartão de crédito a uma tabela no banco de dados do servidor, mas tiver uma regra comercial que não permite que os funcionários consultem informações sobre o cartão de crédito estando offline, você não terá que propagar a alteração do esquema no cliente. Se você decidir propagar a alteração do esquema, a maneira como você faz isso depende do tipo de alteração.

Alterações de esquema comuns

As duas alterações de esquema mais comuns são adicionar uma coluna a uma tabela existente e adicionar uma nova tabela ou decidir incluir uma tabela existente que não era parte originalmente do aplicativo. Se o aplicativo exigir uma nova tabela a ser sincronizada, deverá adicionar um SyncAdapter para a tabela. Depois que os componentes do servidor são atualizados, o aplicativo cliente ou o usuário do aplicativo pode determinar se deve ser feita a sincronização da nova tabela. Se a decisão for sincronizá-la, os componentes do cliente deverão ser alterados para incluir um SyncTable para a nova tabela. Essas alterações devem ser enviadas para cada aplicativo cliente de alguma forma. A tecnologia ClickOnce permite que você publique as atualizações do aplicativo e os aplicativos podem procurar atualizações antes de iniciarem. Se você adicionar uma nova coluna a uma tabela e quiser que a coluna seja sincronizada, deverá adicionar a coluna ao banco de dados do cliente e atualizar os comandos usados para sincronizar as alterações. Para alterações no esquema diferentes da adição de uma nova coluna, descarte a tabela no cliente e crie-a novamente com o Sync Framework ou outro mecanismo.

Versões coexistentes

Em alguns cenários, as versões novas e antigas de um aplicativo cliente devem coexistir. Em tais casos, você pode adotar duas abordagens diferentes:

  • Mantenha várias versões dos componentes do servidor para que uma versão mais antiga dos componentes do cliente possa continuar acessando a versão adequada dos componentes do servidor. A melhor abordagem para controlar versões é expor um novo serviço com a funcionalidade atualizada. Os clientes podem ser atualizados usando a tecnologia do ClickOnce. Quando a atualização for concluída, o cliente será redirecionado ao novo serviço Web.

  • Projete os componentes do servidor e do cliente para usarem um parâmetro de versão do aplicativo. Essa abordagem permite que o aplicativo cliente notifique o servidor sobre qual versão ele espera. Considere o seguinte exemplo no qual o procedimento armazenado que seleciona inserções a partir do servidor aceita um parâmetro @appversion. Um parâmetro é adicionado ao SelectIncrementalInsertsCommand e, em seguida, um valor é fornecido com um SyncParameter no SyncAgent. Quando a sincronização ocorre, a versão do aplicativo é enviada para o servidor, e o procedimento armazenado seleciona a versão correta do esquema de tabelas.

    this.Configuration.SyncParameters.Add(
          new SyncParameter("@appversion", 1));
    customerIncrUpdates.Parameters.Add("@appversion", SqlDbType.Int);
    
    Me.Configuration.SyncParameters.Add( _
          New SyncParameter("@appversion", 1))
    customerIncrUpdates.Parameters.Add("@appversion", SqlDbType.Int); 
    
    CREATE PROCEDURE usp_CustomerSelectIncrementalInserts(
        @sync_last_received_anchor timestamp, 
        @sync_new_received_anchor timestamp, 
        @appversion int
    )
    
    AS
        IF @appversion = 1
        BEGIN
            SELECT CustomerId, CustomerName, SalesPerson
            FROM Sales.Customer 
            WHERE InsertTimestamp > @sync_last_received_anchor 
            AND InsertTimestamp <= @sync_new_received_anchor
        END
        ELSE IF @appversion = 2
        BEGIN
            SELECT CustomerId, CustomerName, SalesPerson, CustomerType
            FROM Sales.Customer 
            WHERE InsertTimestamp > @sync_last_received_anchor 
            AND InsertTimestamp <= @sync_new_received_anchor
        END
        ELSE
        BEGIN
            PRINT('Unrecognized version')
            RETURN
        END
    

Consulte também

Conceitos

Arquitetura e classes para sincronização entre cliente e servidor
Considerações sobre implantação e design de aplicativos