wcf - too - maxReceivedMessageSize no está arreglando 413: entidad de solicitud demasiado grande
http error 413 (4)
Agrega esto resuélvelo por mí:
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_Example"
maxBufferSize="2147483647"
maxReceivedMessageSize="2147483647">
</binding>
</basicHttpBinding>
</bindings>
Mi llamada a mi servicio web WCF está fallando con System.Net.WebException: The request failed with HTTP status 413: Request Entity Too Large.
Comprobando Fiddler, veo que estoy enviando:
Longitud del contenido: 149839
Que es más de 65 kb.
Al habilitar el seguimiento de WCF en el servidor, veo:
System.ServiceModel.ProtocolException: se ha excedido la cuota máxima de tamaño de mensaje para los mensajes entrantes (65536). Para aumentar la cuota, use la propiedad MaxReceivedMessageSize en el elemento de enlace apropiado.
Agregar esta propiedad no resuelve el problema.
Lo intenté con esa propiedad y (más tarde) con varias otras que las publicaciones sugirieron. Esto es lo que tengo actualmente (en el servidor) :
<basicHttpBinding>
<binding name="PricerServiceSoap"
closeTimeout="00:10:00" openTimeout="00:10:00"
receiveTimeout="00:10:00" sendTimeout="00:10:00"
maxBufferSize="2147483647"
maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647">
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
maxArrayLength="2147483647" maxBytesPerRead="2147483647"
maxNameTableCharCount="2147483647" />
</binding>
</basicHttpBinding>
Mi único punto final (en <client>
) es:
<endpoint address="/NetPricingService/Service.asmx"
binding="basicHttpBinding" bindingConfiguration="PricerServiceSoap"
contract="Pricing.PricerService.PricerServiceSoap"
name="PricerServiceSoap" />
También he agregado:
<dataContractSerializer maxItemsInObjectGraph="2147483647"/>
bajo <behavior>
.
Incluso corrí (para IIS 7):
%windir%/system32/inetsrv/appcmd set config "WebServicesDev/PricingService"
-section:requestFiltering -requestLimits.maxAllowedContentLength:104857600
-commitpath:apphost
Nada hace ninguna diferencia.
Una pega es que este es un servicio WCF destinado a reemplazar un servicio ASMX anterior. El esqueleto del servicio se generó con svcutil a partir de WSDL existente. No puedo cambiar las configuraciones del cliente (y los clientes están en varios idiomas). Mi proyecto de cliente de prueba importó el servicio con Agregar referencia web (en Add Service Reference / Advanced
), por lo que no tengo configuración WCF. Sin embargo, el cliente de prueba funciona si lo señalo en el servicio ASMX anterior.
¿Cómo puedo arreglar o diagnosticar esto?
información adicional
Si uso el Microsoft Service Configuration Editor para generar la configuración (configuración de maxReceivedMessageSize y maxBufferSize), funciona. El problema es que el punto final se especifica en <service>
y no me permite especificar la dirección relativa /NetPricingService/Service.asmx. Si edito los enlaces en la configuración generada por svcutil (donde el punto final está bajo <client>
), no funciona con solicitudes grandes.
La respuesta fue mirarme a la cara.
La configuración generada por svcutil era para el cliente. Lo estaba usando en el servidor.
Estaba editando los enlaces para los puntos finales especificados en <client>
, lo que no supuso ninguna diferencia para el servicio.
Agregar un punto final <service>
adecuado y establecer maxReceivedMessageSize y maxBufferSize en su enlace resolvió el problema.
Tuve un problema similar. Para mí, el problema fue que mi punto final no bindingConfiguration
explícitamente el enlace utilizando bindingConfiguration
y, por lo tanto, debe haber estado usando algún predeterminado en alguna parte.
Tuve:
<webHttpBinding>
<binding
name="myXmlHttpBinding"
maxReceivedMessageSize="10485760"
maxBufferSize="10485760">
<readerQuotas
maxDepth="2147483647"
maxStringContentLength="2147483647"
maxArrayLength="2147483647"
maxBytesPerRead="2147483647"
maxNameTableCharCount="2147483647"/>
<security mode="None"/>
</binding>
</webHttpBinding>
y mi punto final definido como:
<service
name="blah.SomeService">
<endpoint
address=""
behaviorConfiguration="WebHttpBehavior"
binding="webHttpBinding"
contract="blah.ISomeService">
<identity>
<dns value="localhost"/>
</identity>
</endpoint>
</service>
Funcionó una vez que cambié el punto final a:
<service name="blah.SomeService">
<endpoint address=""
behaviorConfiguration="WebHttpBehavior"
binding="webHttpBinding"
bindingConfiguration="myXmlHttpBinding"
contract="blah.ISomeService">
<identity>
<dns value="localhost"/>
</identity>
</endpoint>
</service>
intenté cosas de 10 blogs diferentes y mi compañero de trabajo lo descubrió. tuvimos que agregar una sección básica de HttpsBinding dentro de, además de la sección básica HttpBinding. Tenemos un servicio webapi llamando a wcf. el método webapi estaba detectando un error demasiado grande cuando llamaba al método de servicio wcf. Este cambio se aplicó en el archivo web.config del servicio wcf.