2012-07-10 2 views
4

"작은"계산 인스턴스로 Windows Azure에서 호스팅되는 ASP.NET HTTP 처리기가 있습니다. 대형 바이너리 파일의 다운로드 및 업로드를 처리합니다. 해당 웹 역할 내에서 실행되는 것은 없으며 지침별로 2 개의 인스턴스가 구성되어 있습니다. 연결 속도가 느린 컴퓨터에서 다운로드를 수행하고 여러 다운로드를 한 번에 수행하여 클라이언트 측의 대역폭을 줄이려고 시도 할 때 가끔 .Write에서 Response.OutputStream까지 처리기에서 ThreadAbortException을 얻습니다. 사전에 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.Redirect 또는 Server.Transfer 접촉하지 오전

참고.

+0

ThreadAbortedException 일반적으로 어디에 문제가 정확히 말하지 않는 일반적인 예외입니다. 코드에서 예기치 않은 예기치 않은 예외를 예상하도록하고 가능하면 조치를 다시 시도하십시오. –

답변

5

큰 파일을 업로드 할 때 IIS는 요청 스트림을 읽으려고 시도하고 5 분 이상 차단하면 IIS가 결국 ThreadAbortException을 throw합니다. 이 라인을 가지고 노는

시도 :

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

는 또한이 방법을 시도해보십시오 : http://cutesoft.net/forums/permalink/77440/77438/ShowThread.aspx#77438