2012-09-18 12 views
6

Sto tentando di inviare un Json al nostro servizio web. Il mio problema è che quando la mia richiesta.ContentLength supera 7kb. Riceverò un'eccezione web 500 su richiesta. GetResponse(). Ma se la mia richiesta.ContentLength è inferiore a 7kb, il mio post è stato inviato con successo.Impossibile pubblicare su WebRequest se Lunghezza contenuto> 7kb utilizzando C#

messaggio di errore: Codice di

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

Fonte:

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> 

Logs eccezione:

(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

suona come il problema è probabilmente nel servizio Web ... –

+0

Hi Jon, hmm il servizio web è stato configurato in modo da permette 2147483647 lunghezza massima richiesta. Abbiamo anche provato a inserire un punto di interruzione, ma il servizio web non ha ricevuto alcun post. se la lunghezza del contenuto> 7kb –

+2

Bene, stai ricevendo un 500 - che suggerisce un errore interno * da qualche parte *. Ti suggerisco di dare un'occhiata da vicino a tutti i registri disponibili. –

risposta

0

Prova questo:

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

o se si desidera impostare solo per la vostra applicazione:

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

Puoi trovare altre opzioni di limite here.

Spero che questo aiuti

+0

grazie, questo aiuta davvero. Scusa se ho dimenticato di contrassegnarlo come risposta. Grazie –

3

Potrebbe essere necessario abilitare il supporto per file di grandi dimensioni in web.config (parametro httpRuntime, maxRequestLength).
Ecco un esempio

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

ho già impostato httpRuntime maxRequestLength = "1048576" sul mio web.config, e anche impostare il seguente codice sul sistema .webServer –

+0

si prega di inviare la piena httpRuntime del web.config –

+0