如何在 ASP.NET 中為不同的 URL 設置不同的超時時間
我希望我的應用程序中的某些 URL 有不同的連接限制。一些 URL 接受文件上傳並且需要有較大的連接超時。所有其他 URL 需要更小的超時來防止拒絕服務並且不浪費資源。
目前,我在 IIS 中將整個站點的連接超時屬性設置為 60 分鐘。然後我在 web.config 中做了這個:
<system.web> <httpRuntime executionTimeout="480" maxRequestLength="1024" /> </system.web> <location path="FileUpload/WriteFile.rails"> <system.web> <httpRuntime executionTimeout="3600" maxRequestLength="512000" /> </system.web> </location>所以我希望這會將所有 URL 設置為 8 分鐘超時,並允許 WriteFile.rails URL 執行 60 分鐘。相反,所有 URL 都允許執行 60 分鐘。如何讓 IIS 做我想做的事?
該問題專門詢問了超時,但也暗示了設置 maxRequestLength 。我將嘗試對這兩個問題給出一個非常全面的答案(現在我已經花了一天的大部分時間來解決它)。
假設我們的網站上有一個 URL,我們要處理文件上傳。我們希望在該 URL 上接收多達 1 GB 的數據,並且我們將允許客戶端最多連接 1 小時。我們希望所有其他 URL 僅允許 90 秒的連接時間和 POST 正文中的最大 4MB。
全域設置
首先,您必須在全球範圍內提高整個站點的時間和規模限制。首先,您要為整個站點設置“連接超時”。這是一個絕對上限,不能在 web.config 中設置。IIS7 網站在這裡有很好的說明。您還可以使用 IIS7/7.5 附帶的
Microsoft.Web.Administration庫以程式方式執行此操作:var serverManager = ServerManager.OpenRemote("\\web-server-name"); var site = serverManager.Sites["Your-Site-Name"]; site.Limits.ConnectionTimeout = new TimeSpan(1, 0, 0);接下來,您需要設置站點允許的最大大小請求。這是在一個完全不同的地方,在 Request Fitlering 模組中。IIS7 上可能預設未安裝此模組。微軟再次對如何通過 GUI設置有很好的說明。
maxAllowedContentLength這是您可以在 Web.config 中設置的內容:<system.webServer> <security> <requestFiltering> <!-- Allow 1GB uploads --> <requestLimits maxAllowedContentLength="1073741824"></requestLimits> </requestFiltering> </security> </system.webServer>此設置針對
Content-Length標頭進行評估,大於此的請求將立即導致 404.13。設置以字節為單位,接下來以千字節為單位,這與 IIS7 非常一致。ASP.NET 設置
接下來,我們希望將所有 ASP.NET 請求限制為 90 秒/4MB。這可以在 web.config 中完成:
<location> <system.web> <httpRuntime executionTimeout="90" maxRequestLength="4096" /> </system.web> </location>為了使設置全域化,
system.web標籤被包裹在一個location沒有path屬性的標籤中。(在最初的問題中,我沒有將 system.web 標記包裝在 location 標記中,這可能是我的問題的根源。)maxRequestLength這次是千字節。最後,我們希望允許我們的特殊上傳 URL 接受大量上傳。將這些值設置為高於您全域設置的值將不起作用。全域值會覆蓋這些設置。
<location path="Uploads/PostFile.rails"> <system.web> <httpRuntime executionTimeout="3600" maxRequestLength="1048576" /> </system.web> </location>如果其他一切都設置正確,那就應該這樣做。正如 Peter Bromberg 建議的那樣,您可以根據需要添加任意數量的這些塊,以提高特定 URL 的限制。
最後一點:在調試模式下,IIS 不會強制執行連接超時或執行超時設置,以允許您有更多時間進行調試。因此,要在開發人員機器上測試您的設置,您應該進行發布建構,並且您應該將“啟用伺服器端調試”設置設置為
false.