在2分钟子例程后,Response.Redirect不起作用

时间:2011-11-25 11:57:58

标签: c# asp.net

我已经将asp按钮绑定到通过以下步骤生成xls文件的子例程:

  1. 执行一些sql查询(成功)
  2. 使用生成的数据集(成功,2MB)构建excel文件
  3. 使用标准操作将当前页面重定向到“DownloadPage.aspx?filename =”以构建和下载文件
  4. 但是,即使excel文件在源文件夹中可用,它也不会开始任何下载。奇怪的是,它有时会随机起作用。 没有例外,但线程中止需要重定向。

    所以,我没有其他想法......你呢?

    由于

    P.S。我试图将一些IIS参数设置为6分钟或更长时间。

2 个答案:

答案 0 :(得分:1)

我认为网络浏览器已经遇到请求您的网页的超时。所以重定向不起作用。

答案 1 :(得分:1)

2分钟是非常长时间的网络请求。足够长的时间,大多数客户将放弃,通过浏览器超时或用户导航。为什么要满足要求需要这么长时间?是否存在可以改善的重大瓶颈?运行一些SQL查询和构建Excel文件不应该花那么长时间。从服务器的角度来看,将请求保持IO这么长时间也被认为是一个非常糟糕的主意。如果有很多用户,他们可以通过正常使用网站来停止服务器停止。

如果确实需要这么长时间,您可能需要考虑异步方法。不要让用户等待重定向,而是立即提供某种反馈。将用户发送到指示其请求已被接收并正在处理的页面。然后他们可以继续使用该网站。当他们的数据准备好后,该网站可以提供某种通知链接,让他们知道。

在后端,该网站可以启动另一个线程来完成工作。或者,这对于Web应用程序通常更好,您可以将请求排入数据库并让Windows服务或计划的控制台应用程序轮询该数据库以获取新请求,处理它们并将输出保存到Web应用程序可以查找的位置它。然后,Web应用程序中的通知系统只会检查每个请求的输出(或者可能通过AJAX或类似的东西进行轮询),以通知用户数据已准备就绪。