与MVC结果的Response.Flush无法正常工作

时间:2012-04-25 14:29:46

标签: asp.net-mvc download

我们正在实施长时间运行的进程,以使用asp.net 3将数据库内容下载为xml。

文档生成总时间约为3-5分钟,我们希望尽快回复第一个字节。我们已覆盖System.Web.Mvc.FileResult,并尝试执行以下操作:

protected override void WriteFile(HttpResponseBase response)
{
   Stream outputStream = response.OutputStream;
   byte[] header = xmlExportService.XmlHeader();
   response.Flush();
   outputStream.Write(header, 0, header.Length);
   response.Flush();
   //// some long running generation here
}

在Windows 7下的本地iis上,我在浏览器中收集“保存文件”对话框。在生产时,Windows Server 2008 R2在生成整个文件之前没有对话框。

有什么想法吗?

2 个答案:

答案 0 :(得分:5)

不确定这是否对任何人有帮助,但如果启用了HTTP压缩,Response.Flush将无法“正常工作”。我们在服务器上启用了动态压缩,对Response.Flush的调用只会挂起。经过一些研究,它与服务器正在等待所有输出的事实有关,因此它可以“压缩并发送它”。

由于我们正在使用MVC,我正在考虑使用一个属性来动态控制是否为非静态页面启用了压缩。现在,我们在视图中删除了Response.Flush调用。

答案 1 :(得分:2)

你看过这个贴子了吗?同样的问题,接受的答案,可能会有所帮助吗?