2009-06-19 4 views
0

私はSilverlightアプリケーションを開発しています。私は、オフラインにできる別のSilverlightインスタンスでリストを同期する必要があります。私はそれらを同期するためにオンラインサーバーを持っています。Silverlightの同期

だから我々はこれを想像することができます:

PC1:A1 A2 A3

PC2:A1 A2(A3が削除)

サーバー:A1 A2 A3は( PC2を反映するために、A3を削除し、 pc1を更新して削除する)

また、項目の並べ替えを反映する必要があります。私は銀色のオンラインとオフライン(ブラウザ外)でこれを使用したいと思うでしょう。

このような問題を解決した方はいますか?それに対する良いアプローチは何ですか?

は、あなたがこれを処理するために、同期サービスのようなものを使用したい通常の非接続環境で アルトゥル

+0

質問を明確にすることはできますか? –

+0

@Jason:Arturは、2人のユーザーが同じリストを編集するSilverlightアプリケーションを実行していることを意味していると思います。彼は、たとえサーバーに接続していなくても、即座にクライアント側で編集を行うことを望んでいます。通信が復元されると、リストをサーバーと同期させたいので、他のクライアントは変更を参照する必要があります。 –

+0

それはちょうどスコットです。 –

答えて

2

をいただきありがとうございます、それは、Silverlightクライアントに持つには少し重いです。

まず、リストの各項目にGUIDを付けることから始めます。それから私は、各クライアントとサーバー上のリストの挿入、更新、および削除のログを維持します。クライアントがサーバーに接続するたびに、マージ同期を行う必要があります。その場合、あなたは競合を検出し、対処する必要があります。他の誰かが

  • 2つのクライアントが同時に
  • の再発注を処理するためにあなたの要件を項目を編集し、それを削除しながら、

    • 誰かが、アイテムを編集しますアイテムはいくらか複雑です。リスト内のすべてのアイテムのすべてのインデックスを更新するのではなく、「アイテムxの前に移動しました」または「アイテムxの後に移動しました」アクションとして並べ替えを記録することができます。

    +0

    スコット、答えてくれてありがとう。私はMicrosoft Sync Frameworkを見ています。あなたが言っているように同期のものを実装する必要があるようです。私はそれを避けようとしていました。私はリストに項目を格納しているので、InsertAt(x)と言うことができ、問題は解決されます。 –

    +0

    @Artur:基本的には、ほとんどのアップデートが競合しないと仮定してオプティミスティックアルゴリズムを実装しようとしています。しかし、サーバーはまだコンフリクトを検出し、仲裁し、関連するクライアントを変更して更新するために、多くの作業を行う必要があります。これは、ユーザーが変更を行ってコミットしたと考えて、サーバーがその変更を上書きする必要がある場合、ユーザーは変更が上書きまたは失われたというメッセージを受け取る必要があります。 –

    関連する問題