繁体   English   中英

通过Ajax调用MVC异步操作,启动任务,在任务完成之前发送ajax响应?

[英]Call MVC async action through Ajax, start task, send the ajax response before the task completes?

我有以下场景:

我有一个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,可能是因为它已经等待太长时间没有收到原始请求的响应。

我可以在这里查看我的原始问题: 异步控制器操作一分钟后重新调用

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM