Gestisco un sito Web che funziona correttamente da un paio di mesi su IIS 7.5 creato con ASP.net MVC 3.0. Ogni tanto ci troviamo di fronte a un problema quando la nostra richiesta AJAX POST (attivata tramite jQuery) fallisce mentre il JSON che viene inviato viene troncato.Lunghezza contenuto della richiesta HTTP> dimensione del corpo
Quello che abbiamo trovato finora è che per tutte le richieste di questo tipo, l'intestazione "Content-Length" della richiesta ha più dati di quelli che riceviamo effettivamente nella richiesta.
Abbiamo già impostato maxRequestLength-51.200 nel nostro web.config e credo che il valore di maxAllowedContentLength ha una abbastanza grande valore predefinito (non abbiamo impostato che nella nostra configurazione). Inoltre ho una richiesta fallita con "Content-Length" a partire da 7301 (byte) ma siamo riusciti a ottenere solo 2179 byte di esso. Quindi non sospetto che questo stia colpendo alcun limite.
header di richiesta per una richiesta problematica sono i seguenti
- Cache-Control: no-cache
- Connection: keep-alive
- Pragma: no-cache
- Content-Length: 7301
- Content-Type: application/json; charset = utf-8;
- Accettare: application/json, text/javascript, /; q = 0,01
- Accept-Encoding: gzip, sgonfiare
- Accept-Language: it-it, it; q = 0.5
- User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv: 15.0) Gecko/20100101 Firefox/15.0.1
- X-richiesta-Con: XMLHttpRequest
Tutte le idee ??
Aggiornamento: Sono stato in grado di isolare ulteriormente il problema dal nostro codice. Ho scritto un controller indipendente che accetta una stringa JSON e la deserializza semplicemente. In caso di errore, registra l'errore.
Quando si colpisce questo controller in parallelo con 150 thread simultanei in un ciclo di 50 richieste, si verificano alcuni errori in cui il JSON che questo controller riceve viene troncato. Ora siamo fortemente concentrati sull'ottimizzazione di IIS e sulla lettura di più parametri che potrebbero essere correlati (al momento stiamo utilizzando parametri predefiniti su IIS).
Sono fermamente convinto che 150 connessioni simultanee non dovrebbero essere un grosso problema e spero sinceramente che sintonizzando alcuni parametri dovremmo riuscire a superare questo problema. Una volta superato questo problema, condivideremo le mie conclusioni.
* Aggiornamento 2 (8 ottobre) *: mi hanno ulteriormente ristretto il problema.Ho acceso log degli errori in IIS e ho scoperto che la mia richiesta non riuscita ottiene il seguente errore durante la lettura dei dati
BytesReceived = 0
ErrorCode = 2147943395
Error Description = "The I/O operation has been aborted because of either a thread exit or an application request.(0x800703e3)"
mi sto trovando informazioni su questo errore sul forum di IIS, ma sono ancora da sperimentare (mutliple) suggerimenti essere dato. Il seguente link può essere un buon punto di partenza per la ricerca di ulteriori informazioni su questo
http://forums.iis.net/p/1149787/1917288.aspx
Selezionare questa http://stackoverflow.com/questions/10966328/the-json-request-was-too-large-to-be -deserialized/10969382 # 10969382 – VJAI
Hai idea di dove il contenuto viene troncato? È nel browser prima che arrivi alla chiamata Ajax? È come è scritto nella chiamata Ajax? È nel trasferimento HTTP? Sta succedendo in alcuni script sul lato server? – pieman72
Grazie per la risposta ragazzi. @ Mark - Non penso che questo sia legato alla dimensione di JSON (non sto ottenendo l'errore di dimensione massima durante la deserializzazione). Purtroppo non so dove vengono troncati i dati. So che il controller sta ricevendo dati troncati. So anche che la maggior parte delle volte in cui si verifica questo problema, il browser in uso è IE 8. Sto ancora eseguendo il debug e spero di arrivare presto alla fine di questo problema - posterò i miei risultati. –