如何在长请求处理期间保持ASP.NET会话?

TN.*_*TN. 2 asp.net session-state session-timeout iis-7.5

方案如下:

  1. 用户单击以下载需要很长时间才能完成的复杂报告(超过会话超时).
  2. 报告完成后,用户单击任何其他链接,但会话已过期.

用户想知道为什么会话在长时间运行请求期间已过期.

如何告诉ASP.NET在请求期间不会使会话过期?(在请求完成后开始计算会话超时.)

更新:解决方案应该没有JavaScript.

Dav*_*vid 5

Web应用程序及时响应请求.我认为实际的问题并不是会话超时,而是一个长时间运行的进程在应该被卸载到后端时才会在线进行.

不要让用户等待报告,而是启动服务器上的进程以生成报告,并使用响应指示他们的请求已排队并正在处理,并且他们的报告将在过程完成.

然后,用户可以继续浏览网站,使用应用程序等.报告完成后,您可以通过多种方式通知用户.应用程序可以向他们发送电子邮件,甚至可能附带报告.或者可能有一些应用程序内通知系统(如Facebook通知程序)要么具有AJAX轮询机制,要么(响应您的更新不使用JavaScript)可能更加被动,只需在第一页请求后通知他们完成报告.

无论如何,任何花费这么长时间的过程都不应该在Web应用程序中内联.

编辑:作为建议的设置,您可以执行以下操作:

  1. 当用户请求报告时,将记录添加到队列表,其中包括开始生成报告所需的任何信息.
  2. 将应用程序控制返回给用户.
  3. 编写Windows服务或计划的控制台应用程序,轮询队列表并处理该表中的任何报告.
  4. 每个报告完成后,在表格中更新其状态.
  5. 可选地还使服务/应用程序通知用户(电子邮件,将记录添加到驱动网站上的应用内通知系统的表等).
  6. 用户可以按照通知下载报告,或者只是检查网站中的"报告队列".