2012-07-10 59 views
4

我有一个ASP.NET小型计算实例中的Windows HTTP Azure托管的ASP.NET HTTP处理程序。它处理大型二进制文件的下载和上传。根据指导原则,其他任何内容都不会在该Web角色中运行,并且会配置2个实例。当从连接速度慢的计算机上下载完成时,我试图一次执行多次下载以扼住客户端的带宽,有时我会在处理程序中得到一个ThreadAbortException,通常在.WriteResponse.OutputStream(我设置预先设定为Response.BufferOutput = false)。堆栈跟踪如下:在Windows Azure的HTTP处理程序中是否需要ThreadAbortException?

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.RedirectServer.Transfer

+0

ThreadAbortedException是一般例外,一般没有告诉正是问题的所在。请尽量让代码预期偶然的意外异常,并在可能的情况下重试该操作。 – 2012-07-11 11:27:53

回答

相关问题