天天看點

WebService檔案上傳相關配置(404.13、超出限制、逾時)

最近在做檔案上傳的功能,遇到一些問題,記錄如下,以備以後使用。

1.HTTP Error 404.13 - Not Found,請求篩選子產品被配置為拒絕超過請求内容長度的請求。

IIS預設允許請求長度為4M,對于圖檔檔案來說足夠使用,但對于附件來說,這個限制就明顯不夠用了,需要在配置檔案中加入一些設定。

<configuration>
  <system.web>
    <!--最大請求長度,機關byte,目前限制為1G,逾時時間機關為秒,目前時間為1小時-->
    <httpRuntime requestValidationMode="2.0" maxRequestLength="1073741824" executionTimeout="3600"/>
  </system.web>  
  
  <system.webServer>
    <security>
      <requestFiltering>
        <!--最大允許請求長度,機關byte,目前限制為1G-->
        <requestLimits maxAllowedContentLength="1073741824"></requestLimits>
      </requestFiltering>
    </security>
  </system.webServer>
</configuration>      

2.ASP.NET逾時時間已到。

asp.net在預設情況下,逾時時間為90秒,如果90秒内該請求還未有完成,就會傳回逾時的錯誤。

要在配置檔案中設定逾時時間即可,參考上面httpRuntime節點中executionTimeout的設定。

3.設定IIS配置(與設定配置檔案等效)

*打開IIS,選擇需要操作的站點,輕按兩下右側ASP,找到限制屬性,設定腳本逾時為60分鐘

*相應緩沖限制和最大請求實體主體限制都設定為1G(機關byte):1073741824,點選右側應用

*選擇站點,輕按兩下右側配置編輯器,找到system.web節點下的httpRuntime,設定maxRequestLength為1073741824,應用

*再選擇system.webServer>security>requestFiltering,找到requestLimits,設定maxAllowedContentLength值為1073741824,應用

4.由于本次上傳采用的是WebService的方式,上傳完成後提示操作逾時,于是給ws設定了逾時時間

WebService ws = new WebService();
ws.Timeout = 3600000; /*機關毫秒,1小時*/      

5.使用IE和Chrome浏覽器測試,擷取上傳檔案名時遇到一個問題

以前擷取檔案名直接使用files[0],用IE浏覽器調試時發現這樣擷取到的名字帶有F://xxx/這樣的盤符路徑,是以采用如下方式擷取檔案名。

HttpFileCollection files = context.Request.Files;
if (files.Count > 0)
{
    /*擷取真實檔案名,files[0].FileName這種方法在IE浏覽器中上傳會帶有F://路徑*/
    string filename = System.IO.Path.GetFileName(files[0].FileName);
}      

以上為本次上傳功能中遇到的問題,以後上傳相關的問題還會繼續記錄在本文中,如有錯誤之處,請大家指正。

繼續閱讀