Ho il seguente problema.Ottenere 413 errori su IIS con sessioni simultanee che utilizzano lo stesso certificato client HTTPS
Sto ospitando un'applicazione WCF su IIS 8 che accetta solo richieste HTTPS con certificati client. Questo servizio accetta messaggi POST che possono variare di dimensioni (da pochi byte fino a 1 GB) e vengono ricevuti in parallelo per la maggior parte del tempo.
I clienti stanno ottenendo un 413 Richiesta un'entità troppo grande risposta nel seguente caso:
- Quando più connessioni vengono aperte con lo stesso certificato client e molti piccoli file vengono caricati. In questo caso, una richiesta ha esito positivo e tutte le altre falliscono con errore 413.
Il problema potrebbe essere risolto impostando il valore uploadReadAheadSize
ad un valore maggiore della somma di tutti i formati di chiamata parallele nella sezione system.webServer/serverRuntime
della configurazione, ma questo causa il server per allocare l'intera quantità di memoria per il buffer di lettura anticipata per ogni chiamata che fa sì che il server esaurisca la memoria in caso di molte chiamate contemporanee.
La mia configurazione lavora se le chiamate sono fatte con diversi certificati client o in caso di caricamento di un unico grande file.
Ho letto che con IIS 6 c'era un'opzione per impostare SSLAlwaysNegoClientCert
nella configurazione per correggere un bug simile. Ho provato workarounds per impostare questo valore, ma non ci sono riuscito usando IIS 8.0. Ho anche provato a disattivare la cache del client SSL per disabilitare la ripresa della sessione SSL, ma questo non ha risolto il mio problema.
Che cosa può causare gli errori 413? Esiste un modo per abilitare più caricamenti paralleli con un certificato client sullo stesso server senza utilizzare l'intera memoria del server.
Hai provato un approccio per dividere internamente i messaggi a dimensioni più ridotte? –
Questo è un servizio di upload in streaming con un'API REST. Ma lo stesso accadrebbe in quel caso di caricamento con gli stessi certificati client da più posizioni. – hpityu
È possibile includere il contratto di servizio. Suppongo che tu stia o non stai usando un flusso o stai usando 'TransferMode = Buffered' – Aron