2012-09-18 1 views
6

私はWebサービスにJsonを投稿しようとしています。私の問題は、私のrequest.ContentLengthが7kbを超えるときです。私はrequest.GetResponse()でWeb例外500を取得します。しかし、私のrequest.ContentLengthが7kb未満の場合、私の投稿は正常に送信されます。C>を使用してContent Length> 7kbを使用してWebRequestに投稿できません

エラーメッセージ:

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

ソースコード:

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> 

例外ログ:

(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

が... –

+0

こんにちはジョンのサウンドに役立ちます

希望、うーんウェブサービスは、2147483647最大の要求の長さを可能にするように構成しました。また、ブレークポイントを設定しようとしましたが、Webサービスは投稿を受け取りませんでした。コンテンツの長さ> 7kb –

+2

さて、あなたは500を取得しています - これは内部エラー*をどこかに示唆しています*。利用可能なすべてのログを詳細に調べることをお勧めします。 –

答えて

0

はこの試している:あなたはより多くの制限オプションを見つけることができ

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

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

またはあなただけのアプリのためにそれを設定したい場合にhere。この問題は、Webサービスである可能性がありよう

+0

ありがとう、これは本当に役立ちます。申し訳ありませんが、私はそれを回答とマークするのを忘れた場合。ありがとう –

3

web.config(httpRuntime、maxRequestLengthパラメータ)で大きなファイルサポートを有効にする必要があります。ここで
サンプル

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

私はすでに私のweb.configファイル上のhttpRuntime maxRequestLength = "1048576" を設定し、また、システム上で次のコード を設定.webServer –

+0

があなたのweb.configファイルのフルのhttpRuntimeを投稿してください –

+0

<のhttpRuntime executionTimeout = "180" maxRequestLength = "1048576" useFullyQualifiedRedirectUrl = "false" をminFreeThreads = "8" minLocalRequestFreeThreads = "4" appRequestQueueLimit = "100" enableVersionHeader =」 true "/> –

関連する問題