2010-10-23 23 views
1

我的ASP.NET應用程序是一個下載應用(無頁)讀取龐大的二進制文件(1-2 GB - > 1小時以上的下載時間和恢復支持)從本地網絡和他們流式傳輸到Web客戶端(每一個請求 - >一個大的二進制響應,所以根本沒有text/html響應)。我使用HTTP處理程序(.ashx)而不是(.aspx)頁面來處理請求。使用共享緩衝區和生產者 - 消費者模式主線程(來自ASP.NET線程池)創建另一個線程,並共同完成這項工作。最後,兩個線程退出(回到游泳池)。用ASP.NET下載服務器如何完成長時間運行的同步請求?

所以我長期運行的使用從線程池,其通常不建議線程的要求,但我沒有任何網頁在我的應用程序,它仍然使用線程從ASP.NET線程池的一個瓶頸?

環境:服務器2008年64位,IIS 7.0和.NET 4.0

應採取此方案有什麼考慮? 任何意見表示讚賞。

回答

0

正如我所解釋的here,只需在ASHX中使用IHttpAsyncHandler實現來啓動自定義線程並在asp.net線程內完成處理(從而將其返回到池)。使用這個,你可以每秒啓動數以千計的downoads而不用完asp.net線程池線程。 (如何以及如果你想服務於這麼多的請求是另一個討論話題)

編輯:只是不要忘記在你的線程結束時調用asyncRequestState.CompleteRequest(),否則asp.net不會知道你已經完成爲請求提供服務。

0

如果您正在使用從ASP.NET池中的線程來服務這些文件,你會很快打併發下載的硬性限制,而不管可用帶寬。線程在做什麼並不重要;如果他們全部忙/被阻止,其他請求將不能被滿足。

隨着時間這麼長的時期,它也有可能,你可以有不小心的配置等麻煩;下載可能最終取消,應用程序可能會不必要地重置。

什麼是通過ASHX處理程序服務這些文件的原因是什麼?

+0

我拿到後200個併發客戶端壓力測試的時間了,但它是通過在默認的線程(因爲我不使用會話狀態,我可以使用IIS 7的此功能)增加工作進程解決 – Xaqron 2010-10-23 23:53:52

相關問題