Asp.net

如何在 ASP.NET 中為不同的 URL 設置不同的超時時間

  • June 16, 2011

我希望我的應用程序中的某些 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.

引用自:https://stackoverflow.com/questions/6379259