2011-07-27 12 views
1

私は、データをオフラインで保存し、ODataサーバーと同期できる必要があるアプリケーションを構築しています。プレゼンターの1人がビデオを見直しながら、Concurrency Tokenと言いました - このトークンを使って同期プロセスを支援できますか?もしそうなら、私はそれをどのように使って、何を気にする必要がありますか?OData&Concurrency Token

私のターゲットプラットフォームはAndroidなので、Microsoft Sync Frameworkは使用できません。

答えて

5

(HTTP RFCによると)ETagとも呼ばれる同時実行トークンは、エンティティインスタンスのバージョン番号として想像することができます。サーバーは、エンティティーが変更されるたびにその値を上げます。サーバは、これをエンティティとともにクライアントに送信し、クライアントは、変更を適用するときに(If-Matchヘッダ内の)サーバにそれを送り返すことができる。サーバーは、クライアントが最新のバージョンを持っているかどうかを確認し、そうであれば変更を適用します。それ以外の場合は、更新要求に失敗します。 これは2つの方法で同期プロセスを手助けすることができます: エンティティをサーバーから取得し、クライアントが記憶しているものとは異なるETagを持つ場合、サーバーインスタンスの変更が行われます。そのため、クライアントインスタンスを更新するか、クライアントが変更を加えた場合は、何らかの競合解決が行われます。 もう1つの方法は、クライアントからサーバーへのすべての変更を(右のETagsを使用して)送信することです。サーバーは、サーバー上で既に変更されているもののすべてを失敗させます。クライアントはサーバーから新しいバージョンを取得し、競合を解決してからやり直すことができます。 ETagがエンティティ上の公開されているプロパティの1つでない限り、ETagをフィルタリングする組み込みの方法はないので、現在、指定されてからすべてのエンティティが変更されるようにサーバーに問い合わせることはできませんバージョン。サービスを制御するならば、これを行うことができるかもしれません(グローバルなバージョン番号を持っていて、それぞれの変更がそれを呼び起こし、各エンティティは最後の変更のバージョン番号を持っています。 。