HttpHandler收听客户端断开连接?

时间:2013-02-07 15:37:56

标签: c# .net vb.net httphandler abort

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

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

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

非常感谢提前!

背景

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

我认为我正在使用工作流程进行备份,因为用户可能会对延迟感到沮丧,并尝试使用较小的结果。我目前每30分钟自动刷新一次工作程序,但我宁愿更快地清理它。

我现在没有时间清理sql,所以我只想从客户端监听“abort”并在“aborted”时终止处理程序。

1 个答案:

答案 0 :(得分:-1)

通过倾听客户端连接丢弃,您希望实现的目标根本无法解决您的问题。问题的核心是一个长期运行的任务,直接在HttpHandler中启动。

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

在长时间运行的过程中正确确定进度和执行操作的唯一方法是确保代码是多线程的。在ASP.NET中为长时间运行的进程执行此操作的问题是,他们需要suck up threads from the thread pool来为您的页面提供服务。这可能导致您的网站挂起或响应非常缓慢,正如您所经历的那样。

我建议编写Windows服务来处理这些长时间运行的作业,并将结果吐出到临时目录中。然后我会使用MSMQ或类似命令将请求发送到服务进行处理。

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