3

我有以下情况:

我有一个 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

4

1 回答 1

1

我认为这是因为浏览器没有及时响应 MVC 操作,因此会自动重试。

看看这个相关问题的答案: 当没有收到请求的响应时会发生什么?我看到重试

于 2013-05-23T13:24:55.480 回答