Saturday, October 25, 2014

Uploading Large Files to IIS / ASP.NET

Max Upload File Size in IIS and ASP.NET

While IT Hit WebDAV server engine can process files of any size (up to 8,589,934,592 Gb) the hosting environment or you WebDAV client may not support large files upload.
If you host your WebDAV server in IIS/ASP.NET you must specify the file maximum upload size in web.config of your web application. By default maximum upload size is set to 4096 KB (4 MB) by ASP.NET. To increase the upload limit add appropriate section to your web.config file and specify the limit:
In case of IIS 7.x and later, both Integrated and Classic mode:
<system.webServer>
  <security>
    <requestFiltering>
      <requestLimits maxAllowedContentLength="2147483648" />
    </requestFiltering>
  </security>
</system.webServer>
In case of IIS 6.0:
<system.web>
  <httpRuntime maxRequestLength="2097151" />
</system.web>
Important! The maximum file upload segment size for both ASP.NET 2.0 and ASP.NET 4.0 is 2097151Kb = 2Gb. To upload files over 2Gb you need the client application with resumable upload support.
If you need to upload files larger than 2Gb you must implement resumable upload interfaces and upload files with segments. Note that you will need the WebDAV client application that supports resumable upload in this case, such asIT Hit Ajax File Browser or WebDAV Sample Browser. They automatically detect that your server is hosted in IIS, breake file tointo 2Gb segments and upload a file segment by segment.

Upload Content Buffering in ASP.NET 2.0

The file upload is performed differently in ASP.NET 4.0-based application, HttpListener-based application and in ASP.NET 2.0-based application. While ASP.NET 4.0 and HttpListener passes file content directly to the engine, the ASP.NET 2.0 first saves file content in a temporary folder limiting upload capabilities and increasing server load. To avoid upload buffering in ASP.NET 2.0 on servers side, the IT Hit WebDAV Server Engine providesITHitPutUploadProgressAndResumeModule that also significantly improves upload speed. To use the module in your web application add it to modules section in web.config:
In case of IIS 7.x Integrated mode:
<system.webServer>
  <modules>
    <add name="ITHitPutUploadProgressAndResumeModule"type="ITHit.WebDAV.Server.ResumableUpload.PutUploadProgressAndResumeModule, ITHit.WebDAV.Server"preCondition="integratedMode" />
  </modules>
</system.webServer>
In case of IIS 7.x Classic mode and IIS 6.0:
<system.web>
  <httpModules>
    <add name="ITHitPutUploadProgressAndResumeModule"type="ITHit.WebDAV.Server.ResumableUpload.PutUploadProgressAndResumeModule, ITHit.WebDAV.Server" />
  </httpModules>
</system.web>
If you enable this module in ASP.NET 4.0 application it will be ignored.
Important! Always enable ITHitPutUploadProgressAndResumeModule in the following cases:
     - If you are running your application in Visual Studio Development Server (not recommended).
     - If you are implementing resumable upload interfaces and hosting your server in ASP.NET 2.0.
Important! With ITHitPutUploadProgressAndResumeModule module you must always use theDavContextBase(HttpContext) constructor. 

Upload Timeout

To prevent canceling script execution when uploading a large file to application hosted in IIS / ASP.NET you must increase script timeout value:
HttpContext.Current.Server.ScriptTimeout = 2400; // timeout in seconds
Note that if you store your data in a database, often timeout may be caused by a database connection.