c# - Entidad de solicitud de HTTP 413 demasiado grande en el servicio WCF autónomo
wcf service host (2)
Tengo un servicio WCF autohospedado que acepta mensajes a través de HTTPS.
Se está enviando un mensaje desde una aplicación Java, que recibe la respuesta:
HTTP/1.1 413 Request Entity Too Large
Content-Length: 0
Server: Microsoft-HTTPAPI/2.0
Date: Wed, 19 Sep 2012 09:05:34 GMT
Connection: close
No estoy intentando subir un archivo, solo envíe un mensaje XML / SOAP, que es 78kb. Intenté aumentar mi mensaje máximo y el tamaño del búfer, pero fue en vano.
<binding name="SecuredNoProxy" openTimeout="00:00:10" sendTimeout="00:00:10">
<textMessageEncoding messageVersion="Soap11WSAddressing10" />
<security includeTimestamp="true" enableUnsecuredResponse="true">
<localClientSettings timestampValidityDuration="00:15:00" />
</security>
<httpsTransport manualAddressing="false" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" allowCookies="false" bypassProxyOnLocal="true" decompressionEnabled="true" hostNameComparisonMode="StrongWildcard" keepAliveEnabled="true" realm="" transferMode="Buffered" unsafeConnectionNtlmAuthentication="false" useDefaultWebProxy="false" requireClientCertificate="true" />
</binding>
Por favor, avíseme si puedo proporcionar información adicional.
Registro de seguimiento WCF
Recibir bytes en la conexión ''https: // localhost''
Límite de actividad (inicio)
Información de conexión
Lanzando una excepción (Error)
La excepción es:
System.ServiceModel.ProtocolException, System.ServiceModel, Version = 4.0.0.0, Culture = neutral
Como eludí en la pregunta, esto está muy relacionado con las configuraciones vinculantes. En particular, maxReceivedMessageSize.
maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" maxBufferSize="2147483647"
Esta es el área correcta para cambiar (probablemente no para hacer cosas tan grandes, ya que te dejará potencialmente vulnerable a ataques de denegación de servicio). Determine un valor razonable basado en sus mensajes reales.
El punto final de salida se configuró correctamente, pero el punto final de entrada no era: era:
<httpsTransport requireClientCertificate="true" />
Lo que significaba que estaba usando el valor predeterminado de 65536
, que no es suficiente para el mensaje que se envía. Por lo tanto, es realmente un caso de verificar los puntos finales con mucho cuidado, especialmente si tienen un nombre similar.
Para mí fue maxRequestLength en system.web:
<system.web>
<compilation debug="true" targetFramework="4.0" />
<customErrors mode="Off"/>
<httpRuntime
maxRequestLength="2147483647"
executionTimeout="300" />
</system.web>