una too the statuscode significado servidor salida returned respuesta remoto remote reasonphrase que para large información inesperada error devolvió depuración consola comprueba code c# vb.net wcf entity-framework

c# - the - statuscode 413 reasonphrase request entity too large



El servidor remoto devolvió una respuesta inesperada:(413) Entidad de solicitud demasiado grande. (5)

Estoy intentando construir un servicio de aplicación WCF, usando FW4.0. Mi servicio funciona correctamente al transferir el objeto EntiryFramework entre el servidor y el cliente. Pero tengo problemas para pasar el objeto EF de Cliente a Servidor.

Aquí algunos detalles más sobre mi entorno: - El servicio se ejecuta en modo de depuración localmente en IIS - Estoy ejecutando todo esto en mi Windows 7 - Estoy usando Visual Studio 2010 en FW4.0

Estoy tratando de enviar un objeto (tblClient) al servidor para guardar el registro, pero un mantener el error (413) Solicitar entidad demasiado grande. Aquí la pila completa:

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:

Investigué un poco y todo apunta a que la bruja maxBufferSize y / o maxBufferPoolSize y / o maxReceivedMessageSize no es lo suficientemente grande en la configuración de cliente App.Config. Así que los inscribí en el valor máximo: maxBufferSize = "2147483647" maxBufferPoolSize = "2147483647" maxReceivedMessageSize = "2147483647" Pero aún así el error permanece.

Aquí mi aplicación de cliente completa.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>

y el servicio completo Web.Config WCF 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 :-)


No tiene un punto final explícito (es decir, uno definido en su archivo de configuración) para su servicio, por lo que la configuración de enlace declarada ("BasicHttpBinding_IService") no se está utilizando. WCF proporciona un punto final predeterminado junto con un enlace predeterminado ( basicHttpBinding menos que lo basicHttpBinding en la sección protocolMapping del archivo de configuración).

Tienes dos formas de resolver esto en el archivo de configuración de tu servicio:

Puede hacer que la configuración "BasicHttpBinding_IService" sea la predeterminada eliminando el atributo de name :

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

O puede definir un punto final explícitamente en la configuración y asignar su configuración de enlace al atributo bindingConfiguration del punto final.

<services> <endpoint address="" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IService" contract="ServiceReference1.IService" /> </services>


Otra forma de solucionar esto y tener una mejor vista del archivo web.config, es editar el archivo web.config con el "Editor de configuración de servicio de Microsoft" (C: / Archivos de programa (x86) / Microsoft SDKs / Windows / v8.1A / bin / NETFX 4.5.1 Tools / SvcConfigEditor.exe)


Para el registro

Creo que lo tengo. El Web.Config del servicio no tiene la información de enlace. Puse esta información en ella y ¡voilá!

<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>

Tenga en cuenta que el enlace no tiene un nombre especificado.


Si crea un enlace personalizado, por ejemplo, MybasicBinding,

<basicHttpBinding> <binding name="MybasicBinding" closeTimeout="01:00:00" openTimeout="01:00:00" receiveTimeout="01:00:00" sendTimeout="01:00:00" maxBufferSize="2147483647" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" > <readerQuotas maxDepth="32" maxBytesPerRead="200000000" maxArrayLength="200000000" maxStringContentLength="200000000" /> </binding> </basicHttpBinding>

Para evitar el error 413, no especifique Specifying bindingConfiguration = "MybasicBinding" para el punto final del servicio como,

<endpoint address="" binding="basicHttpBinding" bindingConfiguration="MybasicBinding" contract="WCFService.IService" />


si no se especifica ningún enlace y httpsgetenabled es verdadero, puede que necesite establecer basichttpsbinding en la aplicación web.config de su aplicación

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