У меня проблемы с клиентским приложением Windows Mobile 5.0, работающим в среде .NET compact, синхронизирующим данные с веб-службой asp.net 2.0.
Вот список шагов, которые выполняются, после чего, по-моему, возникают проблемы:
- Клиент собирает локальные данные из своей базы данных SQL Compact Edition, которая еще не имеет первичного ключа на стороне сервера.
- Клиент вызывает веб-службу, передавая «новые» данные, а также список других данных, уже сохраненных на устройстве, которые уже имеют первичные ключи (поэтому веб-служба знает, что уже существует!).
- Сервер вставляет новые данные в нашу центральную базу данных, которая, в свою очередь, предоставляет записи уникальный первичный ключ на стороне сервера.
- Ответ на вызов веб-службы теперь загружен (1) новыми данными, которые были централизованно добавлены на сервер с момента их последней синхронизации, (2) данными, которые изменились с момента последней синхронизации, так что мы может обновлять данные, уже находящиеся на устройстве, и (3) вновь назначенные первичные ключи на стороне сервера для данных, которые были только что загружены.
- Клиент сохраняет новые данные с сервера (1), обновляет измененные данные (2) и записывает первичные ключи на стороне сервера для только что загруженных данных (3).
Надеюсь, вышесказанное имеет смысл!
Я обнаружил, что я получаю некоторые дубликаты данных на устройстве, и это происходит из-за сбоя сетевого подключения во время загрузки ответа клиенту. Причина этого заключается в том, что сервер вставляет новые данные, но данные, сообщающие клиенту, каков его первичный ключ на стороне сервера, не возвращаются клиенту. Это приводит к тому, что клиент пытается загрузить новые данные при следующей синхронизации, несмотря на то, что они уже вставлены в нашу центральную базу данных.
Я просто не могу придумать, как мой центральный сервер может определить, правильно ли клиент получил ответ, может кто-нибудь предложить более эффективные способы сделать все это более транзакционным?