[Troubleshooting] 在 IIS 7.0 中設定檔案上傳的大小

以往在寫 ASP.NET 應用程式時,我們大多會習慣使用 Web.config 中的 maxRequestLength 來打開檔案上傳的限制(預設 4096KB),那是因為 IIS 6.0 中沒有上傳檔案大小的限制,但是到了 IIS 7.0 時,微軟在 IIS 的工作行程中加入了一道檢查 HTTP 上傳資料流大小的限制,這個限制的強制性比 ASP.NET 的要強的多,但是卻鮮少有人提及這個部份。

以往在寫 ASP.NET 應用程式時,我們大多會習慣使用 Web.config 中的 maxRequestLength 來打開檔案上傳的限制(預設 4096KB),那是因為 IIS 6.0 中沒有上傳檔案大小的限制,但是到了 IIS 7.0  時,微軟在 IIS 的工作行程中加入了一道檢查 HTTP 上傳資料流大小的限制,這個限制的強制性比 ASP.NET 的要強的多,但是卻鮮少有人提及這個部份。

在 IIS 7.0 中,預設的資料流要求大小是 30MB (30000000 bytes),定義在 applicationHost.config 中的 system.WebServer/requestFiltering/requestLimits 這個區段(預設是沒有加的,要自己在 <requestFiltering> 裡面加):

<system.WebServer>
    <security>
        <requestFiltering>
            <requestLimits maxAllowedContentLength="30000000" />
        </requestFiltering>
    </security>
</system.WebServer>

如果沒有設這個屬性的話,會傳回 HTTP 404.13 (CONTENT_LENGTH_TOO_LARGE) 的訊息,如果此時若又是使用 Silverlight 的話,它只會顯示十分惱人的 NotFound....,這個錯誤只能用除錯器或是看 IIS 的記錄檔才看的出來。

Reference: http://msdn.microsoft.com/en-us/library/ms689462.aspx