2012-09-18 17 views
6

Estoy tratando de publicar un Json en nuestro servicio web. Mi problema es que cuando request.ContentLength supera 7kb. Obtendré una excepción web 500 a pedido. GetResponse(). Pero si mi request.ContentLength es inferior a 7kb, mi publicación se envía correctamente.No se pudo publicar en WebRequest si la longitud del contenido> 7kb con C#

mensaje de error: Código de

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

Fuente:

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> 

Registros de excepción:

(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 
+0

suena como el problema está probablemente en el servicio web ... –

+0

Hola Jon, hmm el servicio web se configuró para permite 2147483647 petición longitud máxima. También tratamos de poner un punto de corte, pero el servicio web no recibió ninguna publicación. si la longitud del contenido es> 7kb –

+2

Bueno, obtendrás un 500, lo que sugiere un error interno * en algún lugar *. Sugiero que eche un vistazo de cerca a todos los registros disponibles. –

Respuesta

0

Prueba esto:

%windir%\system32\inetsrv\appcmd set config -section:requestFiltering -requestLimits.maxAllowedContentLength:1000000 

o si sólo desea establecer para su aplicación:

%windir%\system32\inetsrv\appcmd set config "Default Web Site/<your app>" -section:requestFiltering -requestLimits.maxAllowedContentLength:1000000 

Puede encontrar más opciones de carrera here.

Esperanza esto ayuda

+0

gracias, esto realmente ayuda. Lo siento si olvidé marcarlo como una respuesta. Gracias –

3

Es posible que deba habilitar el soporte de archivos grandes en web.config (parámetro httpRuntime, maxRequestLength).
Aquí es una muestra

<httpRuntime 
... 
... 
maxRequestLength="20485760" 
... 
... 
.../> 
+0

yo ya puse httpRuntime maxRequestLength = "1048576" en mi web.config, y también establecer el siguiente código en el sistema .webServer –

+0

Por favor, después la httpRuntime completo de su web.config –

+0

Cuestiones relacionadas