Asp.net Windows Azure上的HTTP处理程序中是否需要ThreadAbortException?

Asp.net Windows Azure上的HTTP处理程序中是否需要ThreadAbortException?,asp.net,azure,httphandler,Asp.net,Azure,Httphandler,我有一个ASP.NET HTTP处理程序托管在Windows Azure上的一个“小”计算实例中。它处理大型二进制文件的下载和上传。在该web角色中没有运行其他内容,并且根据指导原则配置了2个实例。当从连接速度较慢的计算机上下载时,我试图一次执行几次下载以阻塞客户端的带宽,有时我会在处理程序中收到ThreadAbortException,通常是在期间。将写入响应。OutputStream(我预先设置了Response.BufferOutput=false)。堆栈跟踪如下: System.Thre

我有一个ASP.NET HTTP处理程序托管在Windows Azure上的一个“小”计算实例中。它处理大型二进制文件的下载和上传。在该web角色中没有运行其他内容,并且根据指导原则配置了2个实例。当从连接速度较慢的计算机上下载时,我试图一次执行几次下载以阻塞客户端的带宽,有时我会在处理程序中收到
ThreadAbortException
,通常是在
期间。将
写入
响应。OutputStream
(我预先设置了
Response.BufferOutput=false
)。堆栈跟踪如下:

System.Threading.ThreadAbortException: Thread was being aborted.
   at System.Web.Hosting.UnsafeIISMethods.MgdExplicitFlush(IntPtr context)
   at System.Web.Hosting.IIS7WorkerRequest.ExplicitFlush()
   at System.Web.HttpResponse.Flush(Boolean finalFlush)
   at System.Web.HttpWriter.WriteFromStream(Byte[] data, Int32 offset, Int32 size)
   at MyHandler.ProcessGetRequest(HttpContext context)
   at MyHandler.ProcessRequest(HttpContext context)
(显然,
Stream.Write
调用是内联的,因此它不会显示在堆栈跟踪中)

为什么要中止线程?我猜我遇到了某种超时(可能是套接字写入超时),中止线程是ASP.NET运行时处理它的正常方式吗


请注意,它是一个单独的HTTP处理程序,而不是.aspx/.cshtml页面或MVC控制器,在我的代码中没有任何地方可以触摸到
Response.End
Response.Redirect
Server.Transfer

当您上载大文件时,IIS会尝试读取请求流,如果它阻塞超过5分钟,则最终会导致IIS失败抛出线程异常

试着用这句台词:

<httpRuntime maxRequestLength="2097150" executionTimeout="3600"/>


另外,请尝试以下建议:

ThreadAbortedException是一种一般性异常,通常无法说明问题的确切位置。请尝试让代码预期偶尔出现意外异常,并在可能的情况下重试该操作。