0

在我的網站中,我有一個處理程序(GetFile.ashx),它在執行時允許您以給定下載速率下載文件。處理程序需要執行直到用戶完成下載。 問題是,當處理程序正在執行時,網站的其他頁面(和處理程序本身)無法訪問,並且IIS在等待頁面完成執行之後纔會響應其他請求。如何解決?當處理程序正在處理時,網站沒有響應

我注意到的另一件事是我在Amazon EC2上的服務器上使用IIS7 ...... IIS怎麼可能一次只能處理一個請求?

謝謝。

+0

如果我使用Thread.Sleep(1000000)創建頁面並加載它,則會發生同樣的情況。所有其他頁面無法訪問。 – 2012-04-24 21:19:46

+0

同樣的行爲,如果有人上傳的東西...所有其他網頁變得無法訪問 – 2012-04-24 21:31:49

回答

0

只有有限數量的線程可以同時執行,可能是因爲你已經用盡了所有可用的線程。您可以嘗試使用IHttpAsyncHandler來實現異步HTTP處理程序。

在MSDN上存在用於創建IHttpAsyncHandler的演練,請參閱。

編輯: 你也可以嘗試增加併發請求數,使用:

<system.web> 
    <applicationPool maxConcurrentRequestsPerCPU="24" /> 
</system.web> 

參見ASP.NET的論壇討論,http://forums.asp.net/t/1447626.aspx/1

+0

我是唯一的用戶(因爲我測試它)...我只能做一次請求,否則IIS不會回覆直到另一個請求結束爲止......如何才能使用所有可用的線程? – 2012-04-24 20:54:50

+0

我實現了異步處理程序....沒有任何改變。 – 2012-04-24 21:12:18

+0

你可以發佈實施? – Xharze 2012-04-25 08:44:15

0

我解決了。如果您使用實現IRequireSession的頁面(或處理程序),將鎖定其他頁面進行處理,因爲它將對會話具有排它鎖定。解決方案是創建一個不需要會話狀態的處理程序。