我有以下情况:
我有一个 MVC 异步控制器,它有一个上传操作,它处理一个 csv 文件并使用 nHibernate 将数据保存到数据库中。这称为使用
Task<Nacr.Core.Entities.FileLoad.Job>.Factory.StartNew(() =>
{
_fileUploadService.ProcessJob(job);
}
});
目前,该操作通过 ajax 调用调用,我正在等待 ProcessJob 完成,然后再将我的响应发送回原始 ajax 调用。
我正在使用 signalR 通知程序集线器向用户通知文件进度,以填充 UI 上的记录计数和进度条,这是一种享受。因此,ajax 调用无需等待此完成,因为在处理过程中结果是可见的。
但是,如果在启动 processJob 运行后关闭 ajax 调用,则会收到以下错误:
System.ObjectDisposedException: Session is closed!
这是因为 Session 是在 Windsor 中使用 PerWebRequest 生活方式注册的,但我的问题是,在 ajax 调用得到响应后,是否可以使用会话?
我提出问题的原因是,对于非常大的文件,ajax 请求似乎在一分钟后调用了 processJob,大概是因为它等待了太长时间而没有收到原始请求的响应。
我的原始问题可以在这里查看: Async Controller Action Re-Called after a minute