2012-07-10 60 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

回答

相關問題