2011-09-09 62 views
8

我們有一個頁面,允許用戶一次最多上傳5個文件的Web門戶。該頁面只有5個標準的ASP.NET FileUpload控件。ASP.NET文件上傳停止所有其他請求在網站

的問題是,我們看到,當一個用戶要上傳的文件它所帶來的網站停止所有其他活動。在上傳過程中的1-2分鐘內,我們看到請求開始排隊並請求吞吐量下降到零。只要文件完成上傳,一切都會恢復。 (我們使用New Relic的向我們展示了這是怎麼回事)

我們針對的不是一個經常使用的功能,以及正在上傳的文件並不大。但是,我們已經看到每個大約70kb的4個文件的上傳導致了這一點。

一些調查使我this blog post。不幸的是,他們碰巧銷售的產品需要Server 2008和IIS7,客戶端有2003和IIS6。此外,它似乎並不是4個小小的上傳應該有這種影響。

因此,已經沒有其他人遇到這種情況還是知道的東西,可能爲了使這樣的小規模這個問題已經做錯了?也許有不正確的應用程序池或web.config設置,我們應該看看會抑制吞吐量?

+0

它是否僅在同一臺PC和瀏覽器上進行阻止?在此期間,該網站是否仍然在同一臺PC上的其他PC或其他瀏覽器上進行響應?換句話說,你是否觸及瀏覽器連接每服務器限制? –

+1

有沒有機會讓你的App Pool的線程最大化? – joelmdev

+0

Mufasa - 它阻止所有連接到站點的所有其他PC和瀏覽器,而不僅僅是一個。 jm2 - 也許吧。有沒有一個很好的方法來找出答案? – Ryan

回答

1

嘗試使用委託異步上傳。它可能有幫助。

0

你爲什麼不嘗試把你的上傳控件在更新面板?我認爲這將分開處理上傳請求。 讓我知道這是否工作。

0

當你說網站上的所有其他活動停止時,事實證明只有在正在上傳的客戶端上(編輯:我看到你在其他評論中指出),以及如果您不需要在上載過程中將數據寫入Session,解決方案將非常簡單:更改接受上載的頁面/處理程序/ WebMethod,以使其無法寫入Session,如下所示。

  • 對於一個頁面,添加EnableSessionState="false"EnableSessionState="ReadOnly"@ Page指令。
  • 對於通用處理程序,請從類聲明中刪除 IRequiresSessionState,或將其替換爲IReadOnlySessionState
  • 對於一個WebMethod,使用EnableSession property of the WebMethod attribute[System.Web.Services.WebMethod(EnableSession=false)]
0

,如果你用asp文件上傳服務器控件添加以下代碼到web.config中

<httpRuntime 
executionTimeout="110" 
maxRequestLength="4096" 
requestLengthDiskThreshold="80" 
useFullyQualifiedRedirectUrl="false" 
minFreeThreads="8" 
minLocalRequestFreeThreads="4" 
appRequestQueueLimit="5000" 
enableKernelOutputCache="true" 
enableVersionHeader="true" 
requireRootedSaveAsPath="true" 
enable="true" 
shutdownTimeout="90" 
delayNotificationTimeout="5" 
waitChangeNotification="0" 
maxWaitChangeNotification="0" 
enableHeaderChecking="true" 
sendCacheControlHeader="true" 
apartmentThreading="false" />` 

只是改變executionTimeout="110" maxRequestLength="4096"

+1

當前的web.config具有''。這會達到與你的建議類似的結果嗎? – Ryan

0
  1. http://www.uploadify.com/
    • 允許您上傳單個或多個文件。每個文件將被髮送到 - >

- > 2的Web通用處理器 - 在這裏你可以查看大小,擴展名,在哪裏存儲等..

  1. 上傳完成後,回覆一些msg/do操作。

這種結構與您的網站速度沒有任何關係......它就像他在其他頁面上傳這些文件一樣。另外好的想法是,多個文件一個一個地上傳。

相關問題