1

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

そしてここ:

http://keithelder.net/blog/archive/2007/09/23/Sync-Services-for-SQL-Server-Compact-Edition-3.5-in-Visual.aspx

この時点では「問題なく動作する」ように見えますが、サーバー上で行われた変更はローカルの SDF ファイルには含まれていません。何かが欠けていると思いますが、今は見えません。

Sync Services のバージョン 1 を使用しているように見えたので、Microsoft.Synchronization.* アセンブリへの参照を削除し、Sync フレームワーク 2.0 をインストールして、新しいバージョンのアセンブリをプロジェクトに追加したことが原因ではないかと考えました。それは何の違いもありません。

アイデア?

編集:これを追跡できるかどうかを確認するためにトレースを有効にしたかったのですが、それを行う唯一の方法は、app.config ファイルにエントリが必要なため、WinForms アプリを使用することです (私の元のプロジェクトはクラス ライブラリでした)。WinForms プロジェクトを作成し、すべてを再作成したところ、突然すべてが機能するようになりました。明らかに、これには何らかの理由で Wi​​nForm プロジェクトが必要ですか?

これは実際には私がこれを使用するつもりだった方法ではありません - 別の非 .NET アプリケーションを介して同期を開始し、そこに UI を提供することを望んでいたので、エクスペリエンスはエンド ユーザーにとってもう少し目立たなくなりました。それができなくても構いませんが、これをクラス ライブラリ プロジェクトとして機能させるかどうか、またはその方法を知りたいです。

4

2 に答える 2

2

この方法で(クラスのコンストラクターで)dllの構成ファイルをロードできます。

AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", System.IO.Path.Combine(Environment.CurrentDirectory, "<dll name>.config"));
System.Configuration.ConfigurationManager.RefreshSection("configuration");
于 2011-06-03T12:11:11.257 に答える
0

あなたが説明するシナリオは機能するはずです。クラス内で同期を使用した同様のアプリがありますが、それで問題ありません。app.configを使用して、最も簡単にトレースプロパティを設定できる必要がありますが、それは問題ではありません...エラーは報告されていません。 Syncronizeメソッド?

競合エラーは発生しませんか?

それでも問題が解決しない場合は、アプリケーション構成ファイルのセクションに次のビットを追加できます。

   <switches>
      <add name="DefaultSwitch" value="Information" />
      <!-- Sync Tracer Setting 0-off, 1-error, 2-warn, 3-info, 4-verbose. -->
      <add name="SyncTracer" value="4" />
    </switches>

    <trace autoflush="true">
      <listeners>
        <add name="TestSyncListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="c:\SyncTraceFile.txt" />
      </listeners>
    </trace>

次に、c:\SyncTraceFile.txtで問題を確認します。

于 2010-05-18T16:57:02.373 に答える