我有以下場景:通過Ajax調用MVC異步操作,啓動任務,在任務完成前發送ajax響應?
我有一個MVC異步控制器有一個上傳操作,它處理一個CSV文件並使用nHibernate將數據保存到數據庫。這是使用
Task<Nacr.Core.Entities.FileLoad.Job>.Factory.StartNew(() =>
{
_fileUploadService.ProcessJob(job);
}
});
目前該行動被稱爲thorugh Ajax調用調用,而我等待ProcessJob到發回我給發起Ajax調用響應之前完成。
我使用signalR通知程序集線器通知用戶在文件進度上在UI上填充記錄計數和進度條,這是一種享受。因此,不需要ajax調用等待這個完成,因爲結果在處理期間是可見的。
不過,如果我關閉Ajax調用我已經開始processJob運行後,我收到以下錯誤:
System.ObjectDisposedException: Session is closed!
這是由於該會話是在溫莎PerWebRequest生活方式註冊的事實,但我的問題是有沒有什麼方法可以在ajax調用有迴應後使用會話?
我的問題的原因是,對於非常大的文件,ajax請求似乎在大約一分鐘後回想一下processJob,可能是由於它已經等待了太久而沒有收到原始請求的響應。
我對這個原來的問題可以在這裏看到: Async Controller Action Re-Called after one minute
您的問題,更是一個城堡溫莎的問題,而不是具體到MVC或nhiberbnate甚至AJAX任何東西。我對Castle-Windsor的瞭解不多,但聽起來你需要配置這個特定的注入來使用一種可自行處理的資源。另外,目前還不清楚你是否真的需要一個異步控制器,因爲如果你立即返回,你並不真正同步任何請求。 –