2012-09-30 26 views
6

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

+0

Selezionare questa http://stackoverflow.com/questions/10966328/the-json-request-was-too-large-to-be -deserialized/10969382 # 10969382 – VJAI

+0

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

+0

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

risposta

1

ho finalmente capito la causa e la correzione per la soluzione. Sfortunatamente non è applicabile a tutti i miei ambienti ma aiuta l'ambiente di produzione. Trova dettagli di seguito

Questo risulta essere a causa di un bug in Windows 2008 R2, dove fa asp.net a credere che un cliente ha staccato anche quando non lo ha. Una correzione per lo stesso è disponibile e può essere trovata a http://support.microsoft.com/kb/977453. La correzione fa già parte di Windows 2008 R2 SP1 (trovata da here).

Mentre l'aggiornamento rapido ha funzionato per me su un ambiente con sistema operativo Windows 2008 R2, non può essere applicato a Windows 2008 R2 con SP1. Sfortunatamente il problema può ancora essere riprodotto negli ambienti in esecuzione su SP1 e rimane non risolto. Ho aperto un nuovo caso sui forum IIS per questo problema allo http://forums.iis.net/t/1192310.aspx e lo seguirò invece.

Per saperne di più su questo problema - è possibile seguire il filo a http://forums.iis.net/p/1149787/1917288.aspx

+1

Abbiamo lo stesso tipo di errore, ma su Windows 2008 (non R2). Inoltre, sono confuso, hai detto che "la correzione è già parte di Windows 2008 R2 SP1" e quindi dichiari "sfortunatamente il problema può ancora essere riprodotto negli ambienti in esecuzione su SP1." ? –

+0

hai risolto questo problema? Sto avendo un problema molto simile ... su Windows 2008 R2 SP1 il problema rimane ... su Windows 2008 R2, applico l'aggiornamento rapido e tutto va bene. –

Problemi correlati