2012-04-13 1 views
0

Я хочу спросить о веб-сервисах.обновление данных несколько раз через webservice

Рассмотрим сценарий:

записи Я мои данные в виде VFP настольных приложений. Когда я нажал «сохранить», приложения сохранили мои данные в локальной базе данных и отправили их как xml в webservice (php-файл) в удаленном месте. Затем веб-служба вставляет мои данные в базу данных vfp в удаленном месте. Например, как только я нажал «сохранить», я понял, что совершил ошибку. Я меняю свою запись и снова удаляю «save». Данные будут отправляться снова через webservice для обновления данных в удаленном месте.

Возникает вопрос:

Как гарантировать, что второе обновление будет вставлен в удаленном месте после первой вставки? Я имею в виду, будет ли последовательность операций гарантировать такую ​​же последовательность операций на веб-сервере?

Большое спасибо.

ответ

0

Как правило, это не такая же последовательность, потому что два запроса изолированы друг от друга, а время для достижения пункта назначения зависит от выбранного маршрута. В большинстве случаев он будет работать, как ожидалось.

Возможно, ваш клиент ждет обновления, пока не будет выполнено предыдущее обновление. Просто проверьте ответ от удаленного места.

В конце удаленного места мало что можно сделать, потому что даже если вы можете обнаружить отсутствующий запрос на обновление, у вас его нет, и он никогда не появится. Существует два способа обнаружения недостающих запросов: либо предоставить каждому запросу текущее число, либо добавить какую-то версию в обновление.

Для первого способа, если запрос поступит, проверьте, имеет ли он номер previousNumber + 1. Если нет, сообщите об ошибке или задержите его до получения запроса previousNumber + 1.

Для второго варианта проверьте, совпадает ли текущая версия удаленных данных с ожидаемой версией в запросе. Если нет, сообщите об ошибке.

Эта версия может быть временем, когда вы нажали кнопку «сохранить». Если второе обновление поступит до первого, первое обновление будет иметь меньшую временную метку, чем текущая временная метка, используемая вторым запросом.

+0

Благодарим вас за ответ. Это подтверждает мою мысль. Я в конечном итоге создаю переменную, указывающую статус «free to send». Это изменения значений посредством действия отправки и ответа из удаленного места. Таким образом, следующие данные не будут отправляться, если я не знаю, что предыдущие данные были переданы или были неудачны и нуждаются в повторной передаче. –