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

cyn*_*nic 4 asp.net httphandler azure

我在一个"小"计算实例中托管在Windows Azure上的ASP.NET HTTP处理程序.它处理大型二进制文件的下载和上传.在该Web角色中没有其他任何内容,并且根据指南配置了2个实例.当从具有慢速连接的计算机完成下载并且我尝试一次执行多次下载以扼杀客户端的带宽时,有时我会ThreadAbortException在处理程序中获得一个,最常见的.Write是在Response.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)
Run Code Online (Sandbox Code Playgroud)

(该Stream.Write调用显然是内联的,因此它不会显示在堆栈跟踪中).

为什么线程被中止?我猜我正在达到某种超时(可能是套接字写入超时),正在以正常方式中止线程,以便ASP.NET运行时处理它?

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

Ser*_*ltz 5

当您上传大文件时,IIS会尝试读取请求流,如果它阻塞超过5分钟,则会导致IIS最终抛出ThreadAbortException.

尝试使用此行:

<httpRuntime maxRequestLength="2097150" executionTimeout="3600"/>
Run Code Online (Sandbox Code Playgroud)

也请尝试以下建议:http://cutesoft.net/forums/permalink/77440/77438/ShowThread.aspx#77438