Truckarn
Truckarn

Reputation: 113

maxRequestLength+maxAllowedContentLength+HTTPS not working

I have made a service that i host on an azure webapp. This will be used to upload files. IIS has a built in security feature that limits the file upload size.

To work around this i have put the following in my web.config

<system.webServer>
    <security>
      <requestFiltering>
        <requestLimits maxAllowedContentLength="80000000" />
      </requestFiltering>
    </security>
</system.webServer>
...
    <system.web>
       <httpRuntime maxRequestLength="80000" targetFramework="4.5.2" executionTimeout="9000" />
    </system.web>

This is however not working for me. As soon as i upload a large file (50mb for example) it hits me with a 404. When i upload a smaller file (10mb) it works fine. The service is a soap and is called over https. The call does not time out, the exception occurs within 5 seks of the call being made, my guess is it uploads 30mb and then it thinks it is under attack and aborts.

Am i missing something here?

Upvotes: 1

Views: 3396

Answers (4)

Andr&#233;s Leiva
Andr&#233;s Leiva

Reputation: 11

In my case, the problem was because the configuration of httpProtocol in the web.config file had the 'allowKeepAlive' in false.

 <httpProtocol allowKeepAlive="false"> 

I deleted the allowKeepAlive="false" (making it uses the default value of true) and all worked with big files (configuring the 'maxrequestlength' and 'maxallowedcontentlength')

Upvotes: 0

Ali Sheikhpour
Ali Sheikhpour

Reputation: 11055

For classic ASP users also check this settings in addition to the web.config settigns:

IIS > CLick on Website > ASP > Limit Properties > Maximum request entity body limit

Upvotes: 0

Renato Coqueiro
Renato Coqueiro

Reputation: 126

I did that configuration, but i fixed my problem putting on my ControllerBase something like:

        protected override void OnResultExecuting(ResultExecutingContext filterContext)
    {

        base.OnResultExecuting(filterContext);

        if(filterContext.Result.GetType().Name == "JsonResult")
            filterContext.Result.GetType().GetProperty("MaxJsonLength").SetValue(filterContext.Result, int.MaxValue);
    }

Upvotes: 0

Alex Chen-WX
Alex Chen-WX

Reputation: 531

You can go to folder:

%windir%\system32\inetsrv\

run command:

appcmd set config -section:requestFiltering -requestLimits.maxAllowedContentLength:80000000

or if you only want to set it for your app, run this:

appcmd set config "Default Web Site/" -section:requestFiltering -requestLimits.maxAllowedContentLength:80000000

also you need to update overrideModeDefault to 'Allow' in web.config:

<section name="requestFiltering" overrideModeDefault="Allow" />

Then you can have your web.config updated with appcmd.exe

Hope this article and this article will help you.

About how to use appcmd.exe, you can see https://technet.microsoft.com/en-us/library/cc772200%28v=ws.10%29.aspx

After that deploy your project to azure webapp and try again.

Upvotes: 2

Related Questions