2012-03-30 66 views
6

客戶端頁面使用javascript將多部分表單數據(文件)發佈到我的ASP.NET網站(ashx處理程序)。在ASP.NET應用程序中處理大型併發HTTP POST

用戶選擇幾個文件並開始併發上傳。當文件大小爲150MB +時,這會在ASP.NET服務器端產生幾個併發的POST處理程序。

我有會話控制實施,以及驗證碼功能,以確切知道它是不是一個殭屍淹水我的服務器。

但問題是與初始上傳開始。

每次處理程序是用於處理POST,它會檢查會議(我的自定義的會話,每個用戶頁面的一個)的一個ID,並將該Request.ContentLength大小的文件每個會話POST版的總大小。這些數據被保存到XML中。

但是,由於多個初始帖子同時發生,因此XML記錄器會記錄字節「扼流圈」的總和,並在每個會話中爲所有初始的POST報告0個字節,因爲它們同時進入。

我在persister對象(即XML寫入)上實現了lock,但現在直到一個POST完全處理完畢,其他人才能繼續。

此外,即使我對於「上傳限制後」出現的請求沒有做任何處理,他們仍然需要時間將數據上傳到服務器。

所以我的問題是:

什麼是處理多個併發POST上傳了正確的模式?

在ASP.NET處理程序代碼中過濾請求後,是否立即刪除POST,並保存客戶端上傳數據到IIS的工作?

更新:當lock僅適用於XML寫入/最大會話長度計算時,我仍然具有併發性,這很好。現在我只需要弄清楚如何從ashx處理程序代碼立即刪除會話。

+0

是否所有的http請求寫入同一個文件?聽起來很糟糕的設計。您可能需要考慮使用某些消息隊列服務來處理此問題。將數據保存到數據庫中也是可取的。 – deostroll 2012-04-05 08:56:53

+0

這種情況特別是在同一個會話中(這意味着在同一個文件夾中)兩個相同名稱的文件正被保存到。至於數據庫 - 這是一個好主意,但HttpPostedFile有一個SaveAs方法,它接受文件系統中的路徑。我還沒有看過如何將發佈的文件序列化到使用ASP.NET的數據庫。 – 2012-04-05 11:57:52

回答