Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

The remote server returned an unexpected response: (413) Request Entity Too Large.

I'm trying to build a WCF Application service, using FW4.0. My service work correctly when transferring EntiryFramework object between Server and client. But I'm having problem passing EF object from Client to Server.

Here some more detail about my environment: - The service is running in debug mode locally on IIS - I'm running all this on my Windows 7 - I'm using Visual Studio 2010 on FW4.0

I'm trying to send a object (tblClient) to server to save the record, but a keep having the error (413) Request Entity Too Large. Here the full stack:

System.ServiceModel.ProtocolException occurred       HResult=-2146233087       Message=The remote server returned an unexpected response: (413) Request Entity Too Large.       Source=mscorlib       StackTrace:         Server stack trace:            at System.ServiceModel.Channels.HttpChannelUtilities.ValidateRequestReplyResponse(HttpWebRequest request, HttpWebResponse response, HttpChannelFactory`1 factory, WebException responseException, ChannelBinding channelBinding)            at System.ServiceModel.Channels.HttpChannelFactory`1.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout)            at System.ServiceModel.Channels.RequestChannel.Request(Message message, TimeSpan timeout)            at System.ServiceModel.Dispatcher.RequestChannelBinder.Request(Message message, TimeSpan timeout)            at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)            at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)            at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)         Exception rethrown at [0]:            at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)            at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)            at ClientApp.ServiceReference1.IService.SaveClient(tblClient client)            at ClientApp.ServiceReference1.ServiceClient.SaveClient(tblClient client) in C:\dufh\WPF Project\ClientApp\Service References\ServiceReference1\Reference.vb:line 2383            at ClientApp.ViewModel.ClientViewModel.SaveClient() in C:\dufh\WPF Project\ClientApp\ViewModel\ClientViewModel.vb:line 48       InnerException: System.Net.WebException            HResult=-2146233079            Message=The remote server returned an error: (413) Request Entity Too Large.            Source=System            StackTrace:                 at System.Net.HttpWebRequest.GetResponse()                 at System.ServiceModel.Channels.HttpChannelFactory`1.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout)            InnerException: 

I've do some research and all point to the maxBufferSize and/or maxBufferPoolSize and/or maxReceivedMessageSize witch is not large enough in the Client config App.Config. So I inscresed them to maximum value : maxBufferSize="2147483647" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" But still the error remain.

Here my full Client App.Config

<?xml version="1.0" encoding="utf-8" ?> <configuration>   <system.diagnostics>     <sources>       <!-- This section defines the logging configuration for My.Application.Log -->       <source name="DefaultSource" switchName="DefaultSwitch">         <listeners>           <add name="FileLog"/>           <!-- Uncomment the below section to write to the Application Event Log -->           <!--<add name="EventLog"/>-->         </listeners>       </source>     </sources>     <switches>       <add name="DefaultSwitch" value="Information" />     </switches>     <sharedListeners>       <add name="FileLog"            type="Microsoft.VisualBasic.Logging.FileLogTraceListener, Microsoft.VisualBasic, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"            initializeData="FileLogWriter"/>       <!-- Uncomment the below section and replace APPLICATION_NAME with the name of your application to write to the Application Event Log -->       <add name="EventLog" type="System.Diagnostics.EventLogTraceListener" initializeData="MVVM Sampling"/>     </sharedListeners>   </system.diagnostics>   <system.serviceModel>     <bindings>       <basicHttpBinding>         <binding name="BasicHttpBinding_IService" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647"/>       </basicHttpBinding>     </bindings>     <client>       <endpoint address="http://localhost:7803/Service1.svc" binding="basicHttpBinding"           bindingConfiguration="BasicHttpBinding_IService" contract="ServiceReference1.IService"           name="BasicHttpBinding_IService" />     </client>   </system.serviceModel> </configuration> 

and the full Web.Config WCF service Web.Config

<?xml version="1.0"?> <configuration>    <system.web>     <compilation debug="true" strict="false" explicit="true" targetFramework="4.0" />   </system.web>   <system.serviceModel>      <bindings>       <basicHttpBinding>         <binding name="BasicHttpBinding_IService" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" maxBufferSize="2147483647">           <readerQuotas maxDepth="200" maxStringContentLength="8388608" maxArrayLength="16384" maxBytesPerRead="2147483647" maxNameTableCharCount="16384" />         </binding>       </basicHttpBinding>     </bindings>      <behaviors>       <serviceBehaviors>         <behavior>           <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->           <serviceMetadata httpGetEnabled="true"/>           <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->           <serviceDebug includeExceptionDetailInFaults="false"/>         </behavior>       </serviceBehaviors>     </behaviors>     <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />     </system.serviceModel>   <system.webServer>     <modules runAllManagedModulesForAllRequests="true"/>   </system.webServer>   <connectionStrings>     <add name="MaitreEntities" connectionString="metadata=res://*/Schemat.csdl|res://*/Schemat.ssdl|res://*/Schemat.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=INFOFILE2\SQL2008R2;initial catalog=0001ConneryFerland;user id=sa;password=kermit80;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />   </connectionStrings> </configuration>   Any help would be very welcome :-) 
like image 315
Hugo Avatar asked Dec 13 '13 21:12

Hugo


People also ask

What does 413 Request Entity Too Large mean?

What does “413 Request Entity Too Large” mean? A 413 HTTP error code occurs when the size of a client's request exceeds the server's file size limit. This typically happens when a client attempts to upload a large file to a web server, and the server responds with a 413 error to alert the client.


2 Answers

For the record

I think I got it. The Web.Config from the service does not have the binding information. I placed this info in it, and voila!

<bindings>       <basicHttpBinding>         <binding maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" messageEncoding="Text">           <readerQuotas maxDepth="2000000" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />         </binding>       </basicHttpBinding> </bindings> 

Note here that the binding did not have a name specified.

like image 192
Hugo Avatar answered Oct 05 '22 11:10

Hugo


You don't have an explicit endpoint (meaning one defined in your config file) for your service, so the binding configuration you declared ("BasicHttpBinding_IService") isn't being used. WCF is providing a default endpoint along with a default binding (basicHttpBinding unless you overrode it in the protocolMapping section of the config file).

You have two ways to resolve this in your service's config file:

You can make the "BasicHttpBinding_IService" configuration the default by removing the name attribute:

<binding maxBufferPoolSize="2147483647"..... 

Or you define an endpoint explicitly in the config and assign your binding configuration to the bindingConfiguration attribute of the endpoint.

<services>     <endpoint address=""                binding="basicHttpBinding"               bindingConfiguration="BasicHttpBinding_IService"                    contract="ServiceReference1.IService"  /> </services> 
like image 37
Tim Avatar answered Oct 05 '22 13:10

Tim