Ich verwalte eine Website, die für die letzten paar Monate gut läuft über IIS 7.5 mit MVC 3.0 ASP.net gebaut. Hin und wieder sehen wir uns mit einem Problem konfrontiert, wenn unsere AJAX POST-Anfrage (die durch jQuery ausgelöst wurde) fehlschlägt, da der JSON, der gepostet wird, abgeschnitten wird.Inhalt Länge der HTTP-Anfrage> Körpergröße
Was wir bisher gefunden haben ist, dass für alle solche Anfrage die "Content-Length" Header der Anfrage mehr Daten hat, als wir tatsächlich in der Anfrage bekommen.
Wir haben bereits gesetzt maxRequestLength-51.200 in unserer web.config und ich glaube, dass der Wert von maxAllowedContentLength einen ziemlich großen Standardwert hat (wir haben nicht, dass in unserer Konfiguration festgelegt). Auch habe ich eine fehlgeschlagene Anfrage mit "Content-Length" so niedrig wie 7301 (Bytes), aber wir haben es geschafft, nur 2179 Bytes davon zu bekommen. Ich achte also nicht, dass dies ein Limit ist.
Anfrageheaders für eine problematische Anfrage sind als
- Cache-Control folgt: no-cache
- Verbindung: Keep-Alive-
- Pragma: no-cache
- Content-Length: 7301
- Inhaltstyp: application/json; Zeichensatz = utf-8;
- Akzeptieren: application/json, text/javascript, /; q = 0,01
- Accept-Encoding: gzip, deflate
- Accept-Language: en-de, en; q = 0,5
- User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv: 15,0) Gecko/20100101 Firefox/15.0.1
- X-Requested-With: XMLHttpRequest
Irgendwelche Ideen ??
aktualisieren: Ich habe in der Lage gewesen, das Problem weiter von unserem Code zu isolieren. Habe einen unabhängigen Controller geschrieben, der einen JSON-String akzeptiert und ihn einfach deserialisiert. Im Falle eines Fehlers protokolliert es den Fehler.
Wenn ich diesen Controller parallel mit 150 gleichzeitige Threads in einer Schleife von 50 Anforderungen traf, dann bekomme ich ein paar Fehler, wo der JSON, den dieser Controller empfängt, abgeschnitten ist. Jetzt konzentrieren wir uns stark darauf, IIS zu optimieren und mehr über verschiedene Parameter zu lesen, die möglicherweise zusammenhängen (derzeit laufen wir mit Standardparametern auf IIS).
Ich glaube fest, dass 150 gleichzeitige Verbindungen keine große Sache sein sollten und hoffe aufrichtig, dass wir einige Parameter optimieren sollten, um dieses Problem zu überwinden. Sobald wir über dieses Problem hinauskommen, werden meine Ergebnisse geteilt.
* Update 2 (8. Oktober) *: Ich habe das Problem weiter verengt.Ich drehte ich auf Fehlerprotokoll in IIS und entdecken, dass meine fehlgeschlagene Anforderung der folgenden Fehler bekommt, während der Daten
BytesReceived = 0
ErrorCode = 2147943395
Error Description = "The I/O operation has been aborted because of either a thread exit or an application request.(0x800703e3)"
Lese ich Informationen über diesen Fehler auf iis-Foren zu finden bin, aber ich bin noch mit (mutliple) Anregungen zum Experimentieren gegeben werden. Der folgende Link kann einen guten Ausgangspunkt für mehr Benutzer auf diesem
http://forums.iis.net/p/1149787/1917288.aspx
prüfen folgen diesem http://stackoverflow.com/questions/10966328/the-json-request-was-too-large-to-be -deserialized/10969382 # 10969382 – VJAI
Haben Sie eine Idee, wo der Inhalt abgeschnitten wird? Ist es im Browser bevor es zum Ajax Anruf kommt? Ist es so, wie es beim Ajax-Aufruf geschrieben steht? Ist es in der HTTP-Übertragung? Tritt es in einem serverseitigen Skript vor? – pieman72
Danke für die Antwort Jungs. @Mark - Ich glaube nicht, dass dies mit der Größe von JSON zusammenhängt (Ich bekomme beim Deserialzing keinen maximalen Größenfehler). Leider weiß ich nicht, wo die Daten abgeschnitten werden. Ich weiß, dass der Controller abgeschnittene Daten erhält. Ich weiß auch, dass die meisten Male, wenn dieses Problem auftritt, der verwendete Browser IE 8 ist. Ich bin immer noch Debuggen und hoffentlich auf den Grund dieses Problems bald - wird meine Ergebnisse veröffentlichen. –