如何防止 ASP.NET 中的浏览器超时?

tom*_*msv 2 c# asp.net timeout .net-4.0

场景:

用户将一个小文件或大约 100 kB 上传到可能有 1000 个工作单元的 ASP.NET 4.0 应用程序。然后服务器开始处理工作单元,一次一个。由于从外部服务请求信息,每个单元需要几秒钟才能完成。仅当所有单元都使用事务成功完成时,结果才会保存到数据库中。完成后,用户可以获得已完成内容的列表。

问题是用户没有得到确认,我认为他的浏览器因为超时而放弃了。

未来的文件预计会大几百倍,从而增加问题。

我想防止这个超时。

以下是我的一些想法:

  1. 优化代码以更快地运行。这已完成,不再是问题。
  2. 并行运行对外部服务的请求。
  3. 稍微增加服务器超时。
  4. 让用户上传文件,然后在文件处理完毕后向他发送一封包含结果的电子邮件。
  5. 以某种方式使页面刷新并在等待时向用户显示一些进度信息,例如,完成 5% - 10 分钟内完成。

我如何实现这最后一步,显示进度信息并防止浏览器超时?

欢迎其他建议。

谢谢,

Ali*_*tad 5

您需要处理文件与浏览器响应分离。这是通过

  • 在队列中创建一个持久项(即在数据库、文件等中)以使其具有容错性
  • 将成功结果返回给浏览器
  • 创建一个队列工作器来异步处理您的队列。