微软的服务器版本控制,应用程序的部署和版本控制 (Sync Services)

应用程序的部署和版本控制 (Sync Services)

09/18/2009

本文内容

本主题讨论客户端和服务器应用程序的部署和版本控制。有关初始化对等数据库的信息,请参见如何配置变更跟踪和同步对等方中的“使用架构和变更跟踪基础结构初始化每个数据库”。

使用 Sync Services 的客户端和服务器应用程序的部署方式取决于应用程序的体系结构是双层还是 N 层的。在双层应用程序中,所有同步代码均位于客户端,而且可以像部署基于 SQL Server Compact 3.5 SP1 的任何其他应用程序那样部署应用程序。通常,部署操作需要使用 ClickOnce 发布应用程序,或者需要打包应用程序然后再将其复制到每个客户端。有关如何部署使用 SQL Server Compact 3.5 SP1 的应用程序的更多信息,请参见 SQL Server Compact 3.5 SP1 联机丛书中的主题“部署应用程序”和“如何生成应用程序并将其部署到桌面”。在 N 层应用程序中,还必须将代码部署到承载服务器端同步组件的计算机。

创建和初始化客户端数据库

对于双层和 N 层应用程序,必须决定如何创建和初始化拥有应用程序所需的架构和数据的客户端数据库。有两种主要的方法:

使用 Sync Services 创建数据库,然后在初次同步过程中下载表架构和数据。这是最简单的方法。但是,如果客户端比较多并且数据量很大,这可能会产生大量的网络流量和需要服务器执行大量处理工作。

预先创建具有表架构和初始数据集的数据库。采用 .sdf 文件这种形式的数据库可以被客户端应用程序传输或下载。如果应用程序下载增量变更,它可以在初次同步过程中将客户端数据库置于最新状态。如果使用此方法,请为 CreationOption 属性设置一个适当的值。

如果应用程序包括了上载操作,并且您想要知道发生变更的位置,应用程序可以设置 ClientId 属性以唯一地向服务器标识客户端数据库;或者 Sync Services 将为数据库生成一个新 ID。

备注

预先创建客户端数据库这种方法不适用于为每个客户端筛选不同数据的应用程序。它会导致在初始同步过程中丢失变更。

有关如何初始化客户端数据库的更多信息,请参见如何初始化客户端数据库和处理表架构。

应用程序版本控制

在应用程序开发和部署完毕后,可能还需要开发应用程序的新版本。对于应用程序的版本控制,需要考虑两个方面的问题:

受新版本影响的应用程序的各个部分

新版本是否必须与早期版本共存

通常,N 层应用程序更易于针对 Sync Services 进行更新,因为可以单独更新服务器端组件和客户端组件。这样可使您公开包含已更新功能的新服务,并将客户端与服务器端变更隔离开,直到准备好对客户端组件进行更新。

N 层应用程序的版本控制

对于 Sync Services,要考虑的主要应用程序更新是服务器数据库的架构变更。Sync Services 不会将架构变更从服务器自动传播到客户端。但是,它支持架构变更,只要您更新了应用程序的相应部分。有关客户端数据库中支持的架构变更的列表,请参见处理表架构 (Sync Services)。如果在服务器数据库中进行架构变更,应该首先决定是否必须将其传播到客户端。例如,如果在服务器数据库中的一个表中添加了一个信用卡列,但是您的业务规则不允许雇员离线获取信用卡信息,您便不需要将架构变更传播到客户端。如果您决定传播架构变更,则具体的传播方式取决于变更的类型。

常见架构变更

两个最常见的架构变更是:向某个现有表添加列和添加一个新表,或者决定将一个原先不属于应用程序的现有表包括在内。如果应用程序需要同步一个新表,必须添加该表的 SyncAdapter。在服务器组件更新之后,客户端应用程序或应用程序的用户可以决定是否同步该新表。如果决定同步该新表,必须变更客户端组件以包括该新表的 SyncTable。这些变更必须以某种方式推送到每个客户端应用程序。ClickOnce 技术使您可以发布应用程序更新,然后应用程序在启动之前可以检查是否存在任何更新。如果向表中添加了一个新列并且想要同步该列,必须将该列添加到客户端数据库并更新用于同步变更的命令。对于添加新列之外的架构变更,请通过使用 Sync Services 或其他机制,删除客户端上的表并重新创建它。

版本共存

在某些时候,客户端应用程序的新旧版本可能必须共存。在这种情况下,可以采取两种不同的方法:

维护服务器组件的多个版本,以便客户端组件的较旧版本可以继续访问服务器组件的相应版本。进行版本控制的最好方法是公开具有已更新功能的新服务。可以通过使用 ClickOnce 技术对客户端进行升级。升级完成后,会将客户端重定向到新的 Web 服务。

将客户端和服务器组件设计为使用一个应用程序版本参数。这种方法使客户端应用程序能够向服务器告知它需要的版本。请考虑以下示例,其中的存储过程从接受 @appversion 参数的服务器中选择插入。向 SelectIncrementalInsertsCommand 添加了一个参数,然后通过在 SyncAgent 中使用 SyncParameter 来提供值。在进行同步时,应用程序版本被发送给服务器,然后该存储过程选择正确的表架构版本。

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

请参阅

概念

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值