SyncOrchestratorを使用して〜6 SQL Server 2008 Expressクライアントを同期させています(特にhttp://code.msdn.microsoft.com/windowsdesktop/Database-SyncSQL-Server-e97d1208を少し修正してベースとしています)。私の知る限り、これはすべての接続がピアまたはノードであることを意味します。SyncFramework 2.1の更新と削除が正しく適用されないようです
私は2つのスコープを持っています。 1つはダウンロードのみで、もう1つはアップロードのみです。主に私がそれ以上のことを知らず、依然としてクライアント側のPKとしてGuidsを紹介することで私の頭を包むことができなかったため、ダウンロード専用のスコープはIDカラムで乗り越えられます。すべてのクライアントが約8台程度のテーブルの正確な複製を持つ必要があり、これらのマシンがこのデータになんらかの形で触れることはなく、読み取るだけで問題はありません。
アップロード専用スコープはGuidsを使用しているため、データベースのその部分を制御でき、同じIDシードを使用するすべてのクライアントがサーバーに正しく同期することができません。両方のスコープは、バルクインサートと9ヤード全体でデフォルトのプロビジョニングを使用しているため、プロビジョニングの最後にこれを実行する必要はありません。
私はすべてPerformPostRestoreFixupを使用せずにすべてを最初に設定し、初期データベースはホストからの挿入ステートメントと手動で同期されます。これはうまくいったようですが、更新や削除は適用されていないようです。 VS2010データベースプロジェクトを使用してデータベースをスキーマにのみ再構築して&を同期させたので、これを無視しても問題ありません(歴史的な正確さと無能さを証明するためにのみ使用されます)。その後、ここで説明した手順を使用しました(http://social.microsoft.com/Forums/br/syncdevdiscussions/thread/9ac6d1a1-1565-4b82-a8d8-3d4a9ff5d07b)(sync、backup、restore、call performpostrestorefixup、xクライアントで同期)そして私がこのすべてを設定している私の開発者ボックスでは、私は更新と削除をうまく見ることができた。そのとき、私はこれをxクライアントに配備して、データベースのミラーが見えないと思っています。
最初の同期では、すべてのレコードを再度同期して同期しようとします。私はこれが期待されると信じています。クライアントのApplyChangeFailedイベント中に、DbConflictType.ErrorsOccurred以外のすべてをApplyAction.RetryWithForceWriteに設定しました。これは、クライアントに変更を強制的に強制するためにこれを行う必要があると当初考えていたため、問題の原因になる可能性があります。このシナリオではサーバーが常に勝つことを望んでいますが、トレース中に一括挿入/更新呼び出し中に「Local wins」というフレーズが常に表示されます。再適用が行われる前にエラーが表示されている可能性がありますが、見るのは面倒です。
私が抱いているように見える唯一の問題は、ダウンロード専用のスコープである。最初のクライアントデータベースは約1週間前です。私がperformpostrestorefixupの手順を使用すると、現在とその後の間に適用された更新が表示されません。 SyncFxがクライアント側の空のデータベースをほぼ優先して初期同期を開始しているような場合、ApplyChangesFailedイベントが一切発生せず、すべての更新がうまく適用されるようです。
誰もこれを以前に見たことがあるか、どこに行くのか手掛かりがある場合は、私は大いに感謝します。私の脳は何が起こっているのかを調べようとしている。私の最後の努力は、すべてのクライアントに空のデータベースを展開し、同期を開始させることです。私はdev側でこの問題はありませんでしたが、私は他のクライアントをテストして、何か違うことがあるかどうかを知ることができます。それ以外に、この目的を完全に破るマニュアル同期を続ける以外に何をすべきかわからない。私はPerformPostRestoreFixupが問題を完全に緩和すると思っていましたが、私は同じ問題があってもなくても、おそらく私は何が必要なのか見ていないようです。
ありがとうございました
あなたが言及したダウンロードの範囲で、あなたはApplyChangesFailedイベントで何かを得るか、それとも単純に変更をダウンロードしませんか? – JuneT
申し訳ありませんが、私はそれを言及すべきでした。ダウンロードは、常にLocalUpdateRemoteUpdateまたはLocalInsertRemoteInsertのいずれかでApplyChangesFailedを起動します。私が得意でないことは、クライアントがこれらのテーブルのどれにも触れないことです。 ModifiedOn(datetime)フィールドがありますが、コードを更新するためにコードが導入されたばかりです。データベースはこれをrowversionとして使用しませんが、スキーマに正しく構成されていない可能性があります。 –