Как разрешить откат приложения при закрытии браузера на полпути? - PullRequest
1 голос
/ 11 октября 2011

Я пытаюсь остановить хранение данных в базе данных, если браузер закрыт на полпути для моего веб-приложения.

Например:

После нажатия кнопки «Отправить», во время процесса кто-то закрывает окно браузера или интернет-соединение не работает. Я хочу, чтобы приложение откатило все зафиксированные данные. Возможно ли это сделать в приложении без изменения конфигурации в процедуре хранения?

Ответы [ 3 ]

0 голосов
/ 11 октября 2011

Я могу предложить базу идей на Response.IsClientConnected, которая скажет вам, если пользователь все еще подключен.

Я думаю, что команда sql для вставки данных слишком быстрая , что вы никогда ее не перехватите, однако если команда sql не так быстра, вы можете попробовать ее, даже если я предлагаюДругой способ применить долгое время занимает транзакции SQL.Также, если пользователь прекращает соединение со страницей, также выдаются исключения.

    BEGIN Tran       

    ...Sql Command...

    if (Response.IsClientConnected)
    {
        ...Commit....
    }
    else
    {
        ...Rollback....
        return;
    }
0 голосов
/ 19 октября 2011

Мне любопытно, как вы осуществляете доступ к данным.Если вы используете .NET, я бы провел некоторое исследование System.Transactions.TransactionScope ().Это альтернатива транзакциям, как упоминалось ранее, в SQL и зависит только от реализации уровня доступа к данным (например, Entity Framework или Linq to SQL против хранимых процедур или обычного T-SQL)

http://msdn.microsoft.com/en-us/library/system.transactions.transactionscope.aspx

Помимо этого предложения, вы, как разработчик, можете контролировать такие крайние случаи, как эти.Например, если пользователь находится в середине многоступенчатого процесса;Именно здесь бизнес-правила и варианты использования определяют, как вы должны обрабатывать такие сценарии.Реализация транзакционного состояния может быть вариантом, при котором одни отклоняют ненужные данные, а другие сохраняют их на случай, если пользователь вернется.Учитывая это, я бы сказал, что это скорее проблема дизайна, чем проблемы разработки.

Надеюсь, это поможет.Ура!

0 голосов
/ 11 октября 2011

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

Обычно в случае, когда подобные данные передаются поэтапно.Если они никогда не «завершат» следующий шаг, их предыдущие данные будут удалены каким-либо процессом на более позднем этапе.

...