0

テーブル内の異なるデータ セットを同期するために、同じテーブルにいくつかのスコープをプロビジョニングしようとしています。プロビジョニングはエラーなしでうまく機能します。ただし、同期しようとすると、SyncOrchestrator.Synchronize() の呼び出しがタイムアウトします。

スコープの 1 つだけを同期すると、スコープ フィルターによって定義されているデータだけでなく、すべてのデータが同期されているように見えます。

これは、スコープの 1 つのプロビジョニング コードです。スコープはそれぞれ別のスレッドで実行されるため、同時に同期されます。

サーバーのプロビジョニング:

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();

私の質問は次のとおりです:私が提供したスコープフィルターは可能ですか? 同じテーブルで複数のスコープを同時に実行できますか?

助けてくれてありがとう!

4

2 に答える 2

1

フィルタはSQLSeverCompactEditionではサポートされていません。そこで行った変更はすべてサーバーに同期されます。

于 2012-07-29T14:33:53.860 に答える
1

Scott が述べたように、SqlCeSyncProvider はフィルタリングをサポートしていません。

同様に、クライアントを SQL Express/Server に変更しても、GetDescriptionForScope はスコープ構成を返すときにフィルター構成を含めません。

また、同じスコープに対して複数を定義することもできますが、行が複数のスコープに属する可能性がある重複するスコープに注意してください。その結果、同期ループが発生する可能性があります。

例 (双方向同期を想定)

スコープ 1 フィルターには行 1 が含まれます

スコープ 2 フィルターには行 1 も含まれます

サーバーで行1を更新します

スコープ 1 は行 1 を同期してクライアントに適用します

スコープ 2 は、スコープ 1 によってダウンロードおよび適用された行 1 を同期および検出します (スコープ 2 はスコープ 1 を認識しません)。

したがって、スコープ 2 は行 1 をアップロードしてサーバーに適用します (サーバーでの同じ行の変更がサーバーに返されます)。

スコープ 1 はサーバーから行 1 を再び同期して取得します...

于 2012-07-30T14:10:57.933 に答える