2012-09-19 17 views
8

Ho un servizio WCF auto-hosting che accetta messaggi tramite HTTPS.HTTP 413 Richiesta di entità troppo grande nel servizio WCF self-hosting

un messaggio viene inviato da un'applicazione Java, che riceve la risposta:

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 

io non sto cercando di caricare un file, basta inviare una/messaggio SOAP XML, che è 78KB. Ho provato ad aumentare il mio messaggio massimo e le dimensioni del buffer, ma senza alcun risultato.

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

Per favore fatemi sapere se posso fornire ulteriori informazioni.

WCF Trace Log

Ricevi byte su collegamento 'https: // localhost'

attività di confine (Start)

informazioni connessione

un'eccezione (errore)

L'eccezione è:

System.ServiceModel.ProtocolException, System.ServiceModel, Version = 4.0.0.0, Culture = neutral

+0

Attiva [WCF Tracing] (http://msdn.microsoft.com/en-us/library/ms733025 (v = VS.100) .aspx) per vedere se il messaggio viene elaborato da WCF o meno. Sembra che il messaggio provenga dal componente host HTTP, non dall'impianto idraulico WCF. –

+0

@SixtoSaez - Ho aggiunto le informazioni del registro di traccia WCF. – Fenton

risposta

6

Come ho eluso nella domanda, questo è molto correlato alle configurazioni vincolanti. In particolare, maxReceivedMessageSize.

maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" 

Questa è la zona giusta per cambiare (probabilmente non per rendere le cose abbastanza così grande anche se, come vi lascerà potenzialmente vulnerabile ad attacchi denial of service). Determina un valore ragionevole in base ai tuoi messaggi effettivi.

L'endpoint in uscita è stato configurato correttamente, ma il punto finale in entrata non era - era:

<httpsTransport requireClientCertificate="true" /> 

Il che significava che stava usando il valore predefinito di 65536, che non è sufficiente per il messaggio inviato. Quindi è davvero un caso di controllare gli endpoint con molta attenzione, specialmente se sono chiamati in modo simile.

+1

Steve, so che è passato un po 'di tempo da quando hai risposto a questo, ma potresti approfondire cosa intendevi per endpoint in entrata e in uscita? Grazie. – antscode

+1

È tutto un po 'di foschia. Grazie al cielo per i servizi leggeri REST, non ho dovuto guardare questo genere di cose per un po '. Nonostante ciò, intendevo "outbound" = "il servizio" e "inbound" = "il chiamante" (penso!) – Fenton

2

Per me è stato maxRequestLength sotto system.web:

<system.web> 
    <compilation debug="true" targetFramework="4.0" /> 
    <customErrors mode="Off"/> 
    <httpRuntime 
     maxRequestLength="2147483647" 
     executionTimeout="300" /> 
</system.web> 
Problemi correlati