asp.net-mvc – 将返回文件的长时间运行进程

我正在使用ASP.NET MVC,并且运行时间很长.具体来说,我正在生成一个大PDF供用户下载.

我理解基本概念:

>调用Action方法
>新线程开始生成进程
>返回一个视图,告诉用户正在生成(pdf)
>使用AJAX调用服务器并要求进度
>完成后,将文件提供给用户下载.

我不完全理解的部分是:

>跨越单独的AJAX调用管理线程.我可能需要一些方法来查找正在运行的线程并请求状态.是否有静态上下文我可以保持对线程的引用?我知道HttpContext.Application中的数据缓存,这适合这个吗?
>以及如何呈现完成的文件.我是否创建临时文件并提供下载链接?或者我可以进行返回文件的最终AJAX调用吗?

解决方法

Cashe非常适合这种情况.只有一件事是确保在进程运行时永远不会删除缓存的项目(您可以使用ItemPriority.NotRemovable).

您可以将文件保存在临时文件夹中的磁盘上,也可以将其保留在缓存中一段时间​​(取决于).
我个人不喜欢用文件污染硬盘,所以我会将文件保存在缓存中(在几分钟内使用MediumPriority).但是文件很大并且可以生成经常考虑使用文件系统的数据库.

在客户端上,当最后一个Ajax请求返回结果时(可能看起来像{progress:“100%”,resultUrl:“http://your.url/Where/ToGet/TheFile.aspx?file=GUID-OR-CACHE-KEY”}),您可以将浏览器重定向到提供的URL.
反过来,它将该文件呈现为二进制结果.

客户端重定向可以使用以下Javascript完成:

location.href = response.resultUrl;

顺便说一下,你如何生成PDF? NFOP?

相关文章

判断URL文件是不是在于在。private static bool UrlIsExist(...
由于在.net中,Request时出现有HTML或Javascript等字符串时,...
public static bool ProcessIdCard(this string idCard, out...
protected void Page_Load(object sender, EventArgs e){ Sc...