2010-04-08 97 views
2

我有一個ashx處理程序與下面的代碼。我們的想法是隱藏文件的路徑,並提示下載System.OutOfMemoryException下載文件

 context.Response.Clear(); 
     context.Response.AddHeader("Content-Disposition", "attachment; filename=" + fileName); 
     context.Response.AddHeader("Content-Length", file.Length.ToString()); 
     context.Response.ContentType = "application/octet-stream"; 
     context.Response.WriteFile(file.FullName); 

也能正常工作一段然而文件對別人我得到

異常類型「System.OutOfMemoryException的」被拋出。

+1

在卡西尼? IIS? – JoeBilly 2010-04-08 12:33:14

+0

拋出異常的文件的長度是多少? – kgiannakakis 2010-04-08 12:33:56

+0

它是IIS7,所有文件的大小都是7mb。有時候是有效的。我想我應該在使用聲明中包裝這個。任何想法應該實現什麼 – frosty 2010-04-08 13:26:09

回答

6

非常奇怪,7Mb真的很小。也許你的應用程序池有一個下限?

如果您只需要一個文件下載處理程序,請使用HttpResponse.TransmitFile()這些文件不會在內存中緩衝該文件。

http://msdn.microsoft.com/en-us/library/12s31dhy%28VS.80%29.aspx

+0

@joe,請參閱此頁http://msdn.microsoft.com/en-us/library/e1f13641.aspx,httpRuntime - > maxRequestLength,可能appRequestQueueLimit ---我做錯了嗎? – Aristos 2010-04-08 14:13:22

+0

@Aristos,哦,我明白了!你錯誤**請求**限制和**響應**限制;)由於文件是由服務器傳輸的,它的響應而不是請求。並且請求限制不會拋出OutOfMemoryException,這意味着真正的內存問題。 – JoeBilly 2010-04-08 14:24:51

+0

+1好的,謝謝你的信息。 – Aristos 2010-04-08 14:34:00

0

您已填充系統內存。對於較大的文件,傳輸的數據會緩存在內存中。我會建議創建自己的自定義緩存方法。