2013-08-26 19 views
0

我有一個ASP.NET MVC應用程序,它使用NHibernate將數據保存到SQL Server數據庫中。我可以使用異步執行Fire-and-Forget NHibernate保存在ASP.NET MVC應用程序中嗎?

有些情況下,我想將條目保存到數據庫中(最初由調用控制器上的操作方法觸發),但不需要阻止調用者。

試圖在數據庫中實現一個「即忘即用」機制,將數據庫調用放入任務中,然後在後臺調用它,以便控制可以立即返回給調用方是「安全」嗎? (或者用BackgroundWorker或者「async/await」關鍵字完成同樣的事情)我需要一個解決方案,NHibernate不會被ASP.NET試圖清理其ISession(每個請求)而絆倒。我正在使用Autofac進行會話的終身管理。我假設數據庫操作的生命週期比Web請求本身稍長一些,我不確定這種工作有多順利。

+1

也許你應該把你的數據先排隊(MSMQ),並從那裏取出並執行保存到分貝?一切都可以在事務中工作,並有免費的事務性重試機制。 :) – dariol

回答

3

這樣做並不安全;我有一個blog post on the subject。問題在於,當您沒有進行任何請求時,您的整個AppDomain可能會被拆除。另外,請考慮如果數據庫插入由於某種原因失敗會發生什麼情況?如果你提前回來,那麼沒有辦法通知客戶一個錯誤。

可靠的解決方案必須在將數據返回給調用者之前將數據存儲在某種永久位置。這可以直接在數據庫中或某種類型的隊列中(稍後由獨立工作人員處理)。

+0

謝謝,斯蒂芬!在我的使用案例中,零星的數據丟失是可以接受的(只要它僅與奇怪的AppDomain重啓有關,而不僅僅是怪異的正在進行的bugginess)。可以理解的是,這不適合存儲客戶訂單或其他如此重要的交易!再次感謝! – blaster

相關問題