2012-09-18 9 views
6

Próbuję opublikować Json w naszym serwisie internetowym. Mój problem polega na tym, że gdy moje żądanie.ContentLength przekracza 7kb. Otrzymam wyjątek sieciowy 500 na request.GetResponse(). Ale jeśli moje żądanie.ContentLength jest poniżej 7kb, mój post jest pomyślnie wysyłany.Nie można publikować w WebRequest, jeśli długość zawartości> 7kb przy użyciu C#

Komunikat o błędzie: Kod

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

Źródło:

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> 

Wyjątek Dzienniki:

(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

Wygląda na to, że problem jest prawdopodobnie w służbie sieci ... –

+0

Hi Jon, hmm usługa WWW został skonfigurowany tak, aby pozwala 2147483647 maksymalną długość żądania. Próbowaliśmy również ustalić punkt przerwania, ale usługa internetowa nie otrzymała żadnego postu. jeśli długość zawartości> 7kb –

+2

Cóż, dostajesz 500 - co sugeruje wewnętrzny błąd * gdzieś *. Proponuję przyjrzeć się wszystkim dostępnym dziennikom. –

Odpowiedz

0

Spróbuj tego:

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

lub jeśli chcesz tylko ustawić go do swojej aplikacji:

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

Można znaleźć więcej opcji granicznych here.

Nadzieja to pomaga

+0

dzięki, to naprawdę pomaga. Przepraszam, jeśli zapomniałem oznaczyć go jako odpowiedź. dzięki –

3

Może być konieczne włączenie obsługi dużych plików w web.config (parametr httpRuntime, maxRequestLength).
Oto próbka

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

już ustawione httpRuntime maxRequestLength = "1048576" na moim web.config, a także ustawić następujący kod w systemie .webServer –

+0

należy zakładać pełną httpRuntime swojego web.config –

+0

Powiązane problemy