会话结束后Asp.net Kill请求

时间:2015-10-27 05:52:15

标签: c# asp.net session pdf optimization

我在这里搜索过的帖子并不能真正找到我想要的东西。我知道asp.net Web表单是一项古老的技术,但我现在需要处理它。让我们说我有一个方法可以做一些繁重的处理。例如,有一个功能可以创建300个PDF发票,将其压缩并下载到用户计算机。

示例代码:

for(int i = 1; i <= 300;i++)
{
    PrintPDF(i);
}

现在让我们说PrintPDF打印一条记录大约需要30秒,因此打印300张PDF大约需要150分钟。现在从用户的角度来看,如果我不喜欢,我可以选择退出。如果用户关闭浏览器,那么<​​/ p>

  1. 用户关闭会话后,打印PDF的请求是否立即中止?
  2. 如果没有,我们可以做些什么来确保在用户关闭浏览器后立即中止请求。

1 个答案:

答案 0 :(得分:1)

Http是无国籍的。这意味着当用户关闭浏览器时,您永远不会传达您将收到通知的事实。但是,您始终可以实施Dead man's switch。 I.E.制作一个javascript,每10秒左右发送一次ping服务器&amp;处理已发送“ping”超过二十秒的用户。至于服务器端的重处理 - 这真的是不幸的方式;例如,ASP.NET有最长时间可以花费服务请求 - 检查executionTimeout httpRuntime元素的web.config(默认情况下为110秒)。你当然可以增加这个值 - 但是应用程序池无论如何都可以回收,而且如果在“繁重处理”上有很多请求,你可以用完可用的处理线程。如果该网站可通过互联网访问,也是DDos攻击的好地方。

更好的方法是创建队列(在db / cloud中)和将异步处理此队列的Windows服务。您仍然可以通过在队列项中存储“关闭”标志来实现这种“强制终止请求机制”,该队列项将定期进行服务检查。如果已设置,将停止处理。

其他解决方法是使用websockets(SignalR)。