Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Could not post on WebRequest if the Content Length > 7kb using C#

I am trying to post a Json to our web service. My problem is that when my request.ContentLength exceeds 7kb. I will get a web exception 500 at request.GetResponse(). But if my request.ContentLength is below 7kb, my post is successfully sent.

Error Message:

 The remote server returned an error: (500) Internal Server Error.

Source code:

public static string JsonPost(string url, string method, string postData)
{
    Uri address = new Uri(url + method);
    HttpWebRequest request = WebRequest.Create(address) as HttpWebRequest;
    request.Method = "POST";
    request.ContentType = "application/json";
    byte[] byteData = UTF8Encoding.UTF8.GetBytes(postData);
    request.ContentLength = byteData.Length;
    using (Stream postStream = request.GetRequestStream())
    {
        postStream.Write(byteData, 0, byteData.Length);
    }
    try
    {
        using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
        {
            StreamReader reader = new StreamReader(response.GetResponseStream());
            string JsonResponse = reader.ReadToEnd();
            return JsonResponse;
        }
    }
    catch (WebException ex)
    {
        string message = ((System.Net.HttpWebResponse)(ex.Response)).StatusDescription;
        if (message.Contains("busy"))
            return message;
        else
            throw new Exception(message);
    }
}

Web.config:

        <?xml version="1.0"?>

<configuration>
  <appSettings>
    <add key="webpages:Version" value="1.0.0.0"/>
    <add key="ClientValidationEnabled" value="true"/>
    <add key="UnobtrusiveJavaScriptEnabled" value="true"/>
  </appSettings>

  <system.web>
    <httpRuntime executionTimeout="180" maxRequestLength="1048576" useFullyQualifiedRedirectUrl="false" minFreeThreads="8"
    minLocalRequestFreeThreads="4" appRequestQueueLimit="100" enableVersionHeader="true" />

    <compilation debug="true" targetFramework="4.0">
      <assemblies>
        <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Helpers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
      </assemblies>
    </compilation>

    <authentication mode="Forms">
      <forms loginUrl="~/Home/" cookieless="AutoDetect" timeout="2880" />
    </authentication>

    <membership>
      <providers>
        <clear/>
        <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="ApplicationServices"
             enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false"
             maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10"
             applicationName="/" />
      </providers>
    </membership>

    <profile>
      <providers>
        <clear/>
        <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ApplicationServices" applicationName="/" />
      </providers>
    </profile>

    <roleManager enabled="false">
      <providers>
        <clear/>
        <add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="ApplicationServices" applicationName="/" />
        <add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/" />
      </providers>
    </roleManager>

    <pages>
      <namespaces>
        <add namespace="System.Web.Helpers" />
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Routing" />
        <add namespace="System.Web.WebPages"/>
      </namespaces>
    </pages>
  </system.web>

  <system.webServer>
    <security>
      <requestFiltering>
        <requestLimits maxAllowedContentLength="1073741824" />
      </requestFiltering>
    </security>
    <validation validateIntegratedModeConfiguration="false"/>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>

  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="3.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

Exception Logs:

    (System.Net.HttpWebResponse)(ex.Response)   {System.Net.HttpWebResponse}    System.Net.HttpWebResponse
    base    {System.Net.HttpWebResponse}    System.Net.WebResponse {System.Net.HttpWebResponse}
        CharacterSet    "ISO-8859-1"    string
        ContentEncoding ""  string
        ContentLength   1047    long
        ContentType "text/html" string
        Cookies {System.Net.CookieCollection}   System.Net.CookieCollection
        Headers {
            Access-Control-Allow-Origin: *
            Content-Length: 1047
            Cache-Control: private
            Content-Type: text/html
            Date: Tue, 18 Sep 2012 22:33:36 GMT
            Set-Cookie: ASP.NET_SessionId=belurseo1i0ureppkspetw1a; path=/; HttpOnly
            Server: Microsoft-IIS/7.0
            X-AspNet-Version: 4.0.30319
            X-Powered-By: ASP.NET
        }   System.Net.WebHeaderCollection
        IsMutuallyAuthenticated false   bool
        LastModified    {9/19/2012 6:34:07 AM}  System.DateTime
        Method  "POST"  string
        ProtocolVersion {1.1}   System.Version
        ResponseUri {http://localhost/service.svc/Update}   System.Uri
        Server  "Microsoft-IIS/7.0" string
        StatusCode  InternalServerError System.Net.HttpStatusCode
        StatusDescription   "The server encountered an error processing the request. Please see the server logs for more details."  string
        SupportsHeaders true    bool
like image 346
Jeff Robert Dagala Avatar asked Sep 18 '12 22:09

Jeff Robert Dagala


1 Answers

You may have to enable large file support in web.config (httpRuntime, maxRequestLength parameter).
Here is a sample

<httpRuntime 
 ...
 ...
 maxRequestLength="20485760" 
 ...
 ...
 .../>
like image 135
Krishanu Dey Avatar answered Sep 20 '22 19:09

Krishanu Dey