Microsoft Sync Framework を使用するプロジェクトがあります。同期方向を除いて、すべてが正常に機能しています。ユーザーの選択に応じて、同期オーケストレーターの同期方向をアップロードまたはダウンロードのいずれかに設定します。
編集:
状況をよりよく説明するために、ドキュメントをアップロードしました。
コード:
private void RunSynch()
{
SqlConnection sqlServer = new SqlConnection(GetServerConnectionString());
SqlConnection sqlClient = new SqlConnection(GetClientConnectionString());
SyncOrchestrator syncOrchestrator = new SyncOrchestrator();
syncOrchestrator.LocalProvider = new SqlSyncProvider(strScopeName, sqlClient);
syncOrchestrator.RemoteProvider = new SqlSyncProvider(strScopeName, sqlServer);
switch(iButtonState) // int constant
{
case STATE_UPLOAD:
syncOrchestrator.Direction = SyncDirectionOrder.Upload;
break;
case STATE_DOWNLOAD:
syncOrchestrator.Direction = SyncDirectionOrder.Download;
break;
}
((SqlSyncProvider)syncOrchestrator.RemoteProvider).ApplyChangeFailed += new EventHandler<DbApplyChangeFailedEventArgs>(RemoteProvider_ApplyChangeFailed);
((SqlSyncProvider)syncOrchestrator.LocalProvider).ApplyChangeFailed += new EventHandler<DbApplyChangeFailedEventArgs>(LocalProvider_ApplyChangeFailed);
syncStats = syncOrchestrator.Synchronize();
}
private void RemoteProvider_ApplyChangeFailed(object sender, DbApplyChangeFailedEventArgs e)
{
if (rdoConflict.SelectedIndex == 0)// server wins option
{
e.Action = ApplyAction.Continue;
}
else
{
e.Action = ApplyAction.RetryWithForceWrite;
}
}
private void LocalProvider_ApplyChangeFailed(object sender, DbApplyChangeFailedEventArgs e)
{
if (rdoConflict.SelectedIndex == 0) // server wins option
{
e.Action = ApplyAction.RetryWithForceWrite;
}
else
{
e.Action = ApplyAction.Continue;
}
}
ここでの問題は、同期方向がダウンロードのみの場合でも、クライアントの変更によってサーバー データベースが更新されることです。
修理済み:
私はそれを今ようやく働かせました。同期フレームワークにはまったく問題はありませんでしたが、方向が割り当てられているスイッチ部分です。デバッグしたところ、プログラムがスイッチケースを通過しないことがわかりました。これが、方向が常に双方向である理由です。