MS Sync Services を使用して、SQL Server CE 3.5 データベースを SQL Server 2008 データベースと同期しようとしています。VS 2008 を使用しています。ローカル データベース キャッシュを作成し、それを SQL Server 2008 に接続して、同期するテーブルを選択しました。SQL Server Tracking を選択しました。変更追跡用にデータベースを変更し、データのローカル コピー (SDF) を作成しました。
双方向の同期が必要なので、同期エージェントの部分クラスを作成し、コードを OnInitialized() に追加して、テーブルの SyncDirection を Bidirectional に設定しました。デバッガーを使用して説明したところ、このコードが実行されました。
次に、キャッシュ サーバー同期プロバイダー用の別の部分クラスを作成し、イベント ハンドラーを OnInitialized() に追加して、ApplyChangeFailed イベントにフックしました。このコードも正常に動作します - 私のコードは競合があるときに実行されます。
最後に、同期をテストするためにサーバー データに手動で変更を加えました。このコードを使用して同期を開始します。
var agent = new FSEMobileCacheSyncAgent();
var syncStats = agent.Synchronize();
syncStats は、サーバー上で行った変更の数を示しているようで、それらが適用されたことを示しています。ただし、ローカルの SDF ファイルを開くと、変更はありません。
私は基本的にここで見つけた指示に従いました:
http://msdn.microsoft.com/en-us/library/cc761546%28SQL.105%29.aspx
そしてここ:
この時点では「問題なく動作する」ように見えますが、サーバー上で行われた変更はローカルの SDF ファイルには含まれていません。何かが欠けていると思いますが、今は見えません。
Sync Services のバージョン 1 を使用しているように見えたので、Microsoft.Synchronization.* アセンブリへの参照を削除し、Sync フレームワーク 2.0 をインストールして、新しいバージョンのアセンブリをプロジェクトに追加したことが原因ではないかと考えました。それは何の違いもありません。
アイデア?
編集:これを追跡できるかどうかを確認するためにトレースを有効にしたかったのですが、それを行う唯一の方法は、app.config ファイルにエントリが必要なため、WinForms アプリを使用することです (私の元のプロジェクトはクラス ライブラリでした)。WinForms プロジェクトを作成し、すべてを再作成したところ、突然すべてが機能するようになりました。明らかに、これには何らかの理由で WinForm プロジェクトが必要ですか?
これは実際には私がこれを使用するつもりだった方法ではありません - 別の非 .NET アプリケーションを介して同期を開始し、そこに UI を提供することを望んでいたので、エクスペリエンスはエンド ユーザーにとってもう少し目立たなくなりました。それができなくても構いませんが、これをクラス ライブラリ プロジェクトとして機能させるかどうか、またはその方法を知りたいです。