Синхронизация пользователей в веб-службе WCF, выполняющей операции с базой данных - PullRequest
1 голос
/ 13 августа 2010

Я новичок в wcf, и я написал веб-сервис wcf, который выполняет операции с базой данных, как обновление. Услуга используется клиентами Silverlight. Когда несколько пользователей пытаются внести определенные изменения в объект, я хочу, чтобы служба wcf управляла им. например если определенный объект подтвержден (операция обновления в БД) одним пользователем, другому пользователю не должно быть разрешено выполнять ту же операцию над ним. Я не знаю, как синхронизация может быть реализована в WCF.

Пожалуйста, помогите спасибо

1 Ответ

0 голосов
/ 14 августа 2010

ваша синхронизация называется проблемой параллелизма, и такая проблема должна выполняться в базе данных. Я предполагаю, что каждая RDMS (система управления базами данных отношений) имеет специальный тип для версии строки, который используется для обработки оптимистичного параллелизма. Столбец версии строки имеет особое значение, вы не можете установить его значение, но RDMS меняет свое значение каждый раз, когда изменяется запись. Сервер SQL предлагает версию строки в типе данных Timestamp.

Чтобы использовать оптимистичный параллелизм, вам нужно добавить столбец отметки времени в каждую таблицу, в которой вы хотите его обработать. Тогда вы должны использовать этот столбец. Вы должны загружать его с каждой записью, и каждое обновление / удаление должно использовать его значение в предложении WHERE. Затем вам нужно проверить количество записей аффектов, чтобы узнать, было ли обновление / удаление успешным, и обработать неудачные изменения. Это общий подход, если вы используете DbCommand и DbDataReader, относящиеся к классу напрямую. Платформа LinqToSql, DataSets и Entity имеют одинаковый уровень поддержки для оптимистичной обработки параллелизма.

Btw. можно использовать оптимистичный параллелизм без столбца Timestamp, но в этом случае вам необходимо сохранить обновленные значения вместе со старыми значениями, а затем использовать старые значения в предложении WHERE в команде обновления.

С уважением, Ладислав

...