我在这里搜索过的帖子并不能真正找到我想要的东西。我知道asp.net Web表单是一项古老的技术,但我现在需要处理它。让我们说我有一个方法可以做一些繁重的处理。例如,有一个功能可以创建300个PDF发票,将其压缩并下载到用户计算机。
示例代码:
for(int i = 1; i <= 300;i++)
{
PrintPDF(i);
}
现在让我们说PrintPDF打印一条记录大约需要30秒,因此打印300张PDF大约需要150分钟。现在从用户的角度来看,如果我不喜欢,我可以选择退出。如果用户关闭浏览器,那么</ p>
答案 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)。