OData & Concurrency Token - PullRequest
       11

OData & Concurrency Token

1 голос
/ 27 июля 2011

Я создаю приложение, которое должно иметь возможность хранить данные в автономном режиме и синхронизировать их с сервером OData. При просмотре видео один из докладчиков упомянул Concurrency Token - можно ли использовать этот токен для помощи в процессе синхронизации? Если да, то как мне его использовать и на что мне нужно обращать внимание?

Для получения дополнительной информации моя целевая платформа - Android, поэтому я не могу использовать Microsoft Sync Framework.

1 Ответ

5 голосов
/ 27 июля 2011

Маркер параллелизма, также называемый ETag (согласно HTTP RFC), может быть представлен как номер версии экземпляра объекта.Сервер поднимает это каждый раз, когда объект изменяется.Сервер отправляет это вместе с сущностью клиенту, и клиент может отправить его обратно на сервер (в заголовке If-Match) при применении изменений.Затем сервер проверит, что на клиенте установлена ​​последняя версия, и, если это так, применяет изменение.В противном случае он не сможет выполнить запрос на обновление.Он может помочь вам в процессе синхронизации двумя способами: если вы получаете сущность с сервера, и у нее есть отличительный ETag от того, что запоминает ваш клиент, экземпляр сервера изменился, так что вы можете либо обновить экземпляр клиента, либо выполнить какой-либо конфликтразрешение, если клиент внес изменения.Другим способом было бы отправить все изменения от клиента на сервер (с правильными ETag), и сервер потерпит неудачу все те, которые уже изменились на сервере.Затем клиент может получить новые версии с сервера, разрешить конфликты и повторить попытку.Тем не менее, обратите внимание, что если ваш ETag не является одним из общедоступных свойств сущности, то нет встроенного способа фильтрации ETag, поэтому в настоящее время вы не можете попросить сервер предоставить вам все сущности, измененные с данной версии.,Хотя, если вы действительно контролируете службу, вы можете сделать это (иметь глобальный номер версии, и каждое изменение увеличивает его, и каждый объект несет номер версии последнего внесенного в него изменения, тогда вы можете фильтровать по этому свойству версии).

...