1

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

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

但我在文档或 goog 中找不到答案。

提前谢谢了!

背景

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

我想我得到了工作进程的支持,因为用户可能会对滞后感到沮丧,并以较小的结果再试一次。我目前每 30 分钟自动刷新一次工作进程,但我宁愿更快地清理。

我现在没有时间清理 sql,所以我只想监听来自客户端的“中止”,如果“中止”则终止处理程序。

4

1 回答 1

-1

您希望通过侦听客户端连接断开来完成的工作根本无法真正帮助解决您的问题。您问题的核心是直接在 HttpHandler 中启动的长时间运行的任务。

在这种情况下,即使您可以侦听客户端断开连接,它也不会被执行,因为您的代码将忙于执行而无法侦听它。

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

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

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

于 2013-02-08T02:26:18.167 回答