如果瀏覽器在我的Web應用程序中途關閉,我嘗試停止將數據存儲到數據庫。如何讓瀏覽器在中途關閉時回滾應用程序?
例如:
提交按鈕,過程中點擊後,有人關閉瀏覽器窗口或互聯網連接已斷開。我希望應用程序回滾所有提交的數據。有沒有可能在應用程序中執行此操作而不更改存儲過程中的配置?
如果瀏覽器在我的Web應用程序中途關閉,我嘗試停止將數據存儲到數據庫。如何讓瀏覽器在中途關閉時回滾應用程序?
例如:
提交按鈕,過程中點擊後,有人關閉瀏覽器窗口或互聯網連接已斷開。我希望應用程序回滾所有提交的數據。有沒有可能在應用程序中執行此操作而不更改存儲過程中的配置?
不可以 - 如果沒有創建解決方案的最終解決方案,這是不可能的。
通常情況下,像這樣的數據分階段承諾。如果他們從未「完成」下一步,他們之前的數據將在稍後的某個過程中被刪除。
我可以在Response.IsClientConnected
上建議一個基於Response.IsClientConnected
的想法,該想法會告訴你用戶是否仍然連接。
我認爲sql命令插入數據太快了你從來沒有抓過它,如果sql命令不是那麼快,你可以試試它,甚至我建議找到一種不同的方式來應用長時間需要sql事務。另外,如果用戶停止與頁面的連接,則也會拋出異常。
BEGIN Tran
...Sql Command...
if (Response.IsClientConnected)
{
...Commit....
}
else
{
...Rollback....
return;
}
我很好奇你是如何執行你的數據訪問的。如果你使用.NET,我會對System.Transactions.TransactionScope()做一些研究。這是交易的替代,如前面提到的,在SQL並且只取決於你的數據訪問層實現(如實體框架或LINQ to SQL的主場迎戰存儲過程或普通的T-SQL)
http://msdn.microsoft.com/en-us/library/system.transactions.transactionscope.aspx
除了這個建議之外,作爲開發人員來控制這些邊緣案例是由你自己決定的。例如,如果用戶在多步驟過程中;正是在這裏,業務規則和用例定義了你如何處理這種情況。實施交易狀態可能是一種選擇,其中一些解僱其他人保存它的廢料數據,以防止用戶返回。鑑於此,我認爲這可能是一個設計問題,而不是發展問題。
我希望這會有所幫助。乾杯!
我認爲這是一種非常罕見的情況,除非您的進程需要保存數據需要很長時間,但這不是正常情況。那麼保存數據的時間太長,以致用戶在完成保存之前有可能關閉瀏覽器? – Aristos