HttpHandler侦听客户端断开连接

本文关键字:断开 连接 客户端 HttpHandler | 更新日期: 2023-09-27 17:58:16

HttpHandler是否侦听与浏览器的断开连接?

我的猜测是"否",因为它似乎主要/仅用于动态文件创建,那么为什么会这样呢?

但我在文档或谷歌上找不到答案。

非常感谢!

背景

我想"中止"一个HttpHandler,因为目前,我允许大量的excel导出(大约150k行sql,所以大约600k行html)。由于几乎和代码一样荒谬的原因,我有一个查询,它会为用户试图导出的sql行激发尽可能多的sql行。你可以想象,这需要很长时间。

我想我得到了工作进程的备份,因为用户可能会对滞后感到沮丧,然后再试一次,结果会更小。我现在每30分钟自动冲洗一次工人的proc,但我宁愿更快地清理。

我现在没有时间清理sql,所以我只想听听客户端的"中止",如果"中止"就终止处理程序。

HttpHandler侦听客户端断开连接

您希望通过监听客户端连接断开来完成的任务根本无助于解决您的问题。问题的核心是在HttpHandler中直接启动一个长时间运行的任务。

在这种情况下,即使您可以监听客户端断开连接,也不会对其采取行动,因为您的代码将忙于执行而无法监听

在这样长时间运行的进程中,正确确定进度和执行操作的唯一方法是确保代码是多线程的。在ASP.NET中为长时间运行的进程执行此操作的问题是,它们会从为页面提供服务所需的线程池中吸收线程。这可能会导致你的网站挂起或响应非常缓慢,就像你所经历的那样。

我建议编写一个Windows服务来处理这些长时间运行的作业,并让它将结果吐到暂存目录中。然后我会使用MSMQ或类似的方法将请求抛出到服务进行处理。

最终,您希望在ASP.NET之外获得这个长时间运行的线程,在那里您可以利用多线程可以为您提供的好处。例如,能够报告进度并在需要时中止。