C# HttpHandler是否侦听客户端断开连接?

C# HttpHandler是否侦听客户端断开连接?,c#,.net,vb.net,httphandler,abort,C#,.net,Vb.net,Httphandler,Abort,HttpHandler是否侦听与浏览器的断开连接 我的猜测是“否”,因为它似乎主要/仅用于动态文件创建,那么为什么会这样呢 但我在文件或谷歌上找不到答案 非常感谢 背景 我想“中止”一个HttpHandler,因为目前我允许大量excel导出(~150k sql行,所以~600k html行)。出于与代码一样荒谬的原因,我有一个查询,它可以激发用户尝试导出的尽可能多的sql行。你可以想象,这需要很长时间 我认为我正在使用辅助进程进行备份,因为用户可能会对延迟感到沮丧,然后再试一次,结果会更小。目

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

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

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

非常感谢

背景

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

我认为我正在使用辅助进程进行备份,因为用户可能会对延迟感到沮丧,然后再试一次,结果会更小。目前,我每30分钟自动刷新一次辅助进程,但我宁愿更快地清理


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

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

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

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

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


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

@jgauffin我不太确定.net的等价物是什么,但php有这个功能,我猜大多数.net页面都有相同的功能。
HttpHandler
是否侦听客户端断开连接?您试图实现什么?@frazelthomas plz请参阅editASP.NET公开。在许多情况下,这可以与工作线程一起用于为“黑盒”报告生成器创建可中止的请求。如果报表生成器可以直接修改为协作(即定期检查状态),那么它可以自己轮询,而不需要secondary thread.lol。检查是否告诉我“
HttpHandler
s侦听客户端断开连接”是否为“否”。看来我必须接受它并修复sql。谢谢你,该死!使用
new Thread
不会使用线程池-这是一个可行的解决方案(连同轮询线程连接和IsClientConnected以及一个讨厌的非合作线程中止),可以中止长时间运行的报告生成。这是“正确的方式”吗?可以说1)中止很棘手,只有在合作方法不可行时才能使用,2)使用[n现有]报告队列。。但可以充分实现“OK”。在IIS 7.5中,Response.IsClientConnected在以轮询方式使用时按预期工作。如果工作线程忽略/填充中止异常(它可能会忽略/填充),则与在这两种情况下使用等正确地处置资源相比,没有更糟的情况(假设资源是通过
正确地处置的)“工作必须运行到完成”。(但是如果中止异常被填充,或者报告生成代码像筛子一样泄漏资源,那么还有其他问题。)