2012-07-27 253 views
0

我想在同一个表上配置几个范围以同步表中的不同数据集。配置工作很好,没有错误。但是,当我去同步时,对SyncOrchestrator.Synchronize()的调用超时。SqlCeSyncScopeProvisioning过滤器不工作

当我仅同步其中一个作用域时,似乎所有数据都被同步,而不仅仅是由作用域过滤器定义的数据。

这是我为其中一个范围提供的代码。范围每个运行在一个单独的线程中,以便它们同步同步。

服务器配置:

var remoteLogVariableScopeDescription = new DbSyncScopeDescription(string.Format("{0}_{1}", DatabaseID, scopeName)); 
remoteLogVariableScopeDescription.Tables.Add(SqlCeSyncDescriptionBuilder.GetDescriptionForTable("TableName", localConnection)); 
var remoteDatabaseConfiguration = new SqlSyncScopeProvisioning(remoteConnection, remoteLogVariableScopeDescription); 
remoteDatabaseConfiguration.ObjectPrefix = string.Format("Sync_{0}", scopeName); 
remoteDatabaseConfiguration.Tables["TableName"].AddFilterColumn("Time); 
remoteDatabaseConfiguration.Tables["TableName"].FilterClause = [side].Time >= DATEADD(minute, -1, GETDATE()); 
remoteDatabaseConfiguration.SetCreateTableDefault(DbSyncCreationOption.Skip); 
remoteDatabaseConfiguration.SetUseBulkProceduresDefault(true); 
remoteDatabaseConfiguration.CommandTimeout = 30; 
remoteDatabaseConfiguration.Apply() 

本地供应:

DbSyncScopeDescription localFrequentScopeDescription = SqlSyncDescriptionBuilder.GetDescriptionForScope(string.Format("{0}_{1}", DatabaseID, scopeName), string.Format("Sync_{0}", scopeName), remoteConnection); 
var localDatabaseConfiguration = new SqlCeSyncScopeProvisioning(localConnection, localFrequentScopeDescription); 
localDatabaseConfiguration.ObjectPrefix = string.Format("Sync_{0}", scopeName); 
localDatabaseConfiguration.SetCreateTableDefault(DbSyncCreationOption.Skip); 
localDatabaseConfiguration.Apply(); 

我的问题是: 是我提供的范围过滤器可能吗? 你可以同时在同一张桌子上运行多个范围吗?

在此先感谢您的帮助!

回答

1

过滤器在SQL Sever Compact Edition上不受支持。您所做的任何更改都将同步回服务器。

+0

完美,谢谢您! – Stuart 2012-07-30 14:57:17

1

如Scott所述,SqlCeSyncProvider不支持过滤。

同样,即使您将客户端更改为SQL Express/Server,GetDescriptionForScope在返回作用域配置时也不包括过滤器配置。

此外,您可以针对同一范围定义多个,但要注意行可能属于多个范围的重叠范围。这可能会导致同步循环。

例如(假设双向同步)

范围1个过滤器包括行1

范围2过滤器还包括行1

您在服务器上更新行1

范围1个同步,适用第1行到客户端

范围2个同步,并检测1下载和范围1施加的行(范围2具有不知道scope1的)

,范围2个上传,适用第1行至服务器(在服务器的同一行更改返回到服务器)

范围1个同步,并从服务器再等等拿起行1 ...

+0

感谢您的澄清。自从第一次进来以后,我将Scotts的回答标记为正确。尽管如此,这些信息对我们很有帮助。我想我最终读到的地方是SQL CE不支持同一个表上的多个作用域。当我尝试这个时,同步最终会结束,但它总是会抛出异常并锁定表。 – Stuart 2012-07-30 14:59:34

+1

SQL CE支持针对同一个表的多个作用域。它的并发同步引发错误,无论您是否有一个或多个作用域,您都会得到它。它是一个锁定问题。 – JuneT 2012-07-31 00:02:14

+0

这是不同的表在不同的范围内的情况?我有两个范围在不同的表上运行,没有太多问题。 – Stuart 2012-07-31 16:36:28