2012-09-30 10 views
6

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

+0

prüfen folgen diesem http://stackoverflow.com/questions/10966328/the-json-request-was-too-large-to-be -deserialized/10969382 # 10969382 – VJAI

+0

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

+0

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

Antwort

1

ich endlich die Ursache herausgefunden und das Update für die Lösung. Leider ist es nicht für alle meine Umgebungen anwendbar, sondern hilft der Produktionsumgebung. Finden Sie Details unter

Dies ergibt sich aufgrund eines Fehlers in Windows 2008 R2, wo asp.net zu glauben, dass ein Client die Verbindung getrennt hat, auch wenn es nicht ist. Ein Hotfix für dasselbe ist verfügbar und kann unter http://support.microsoft.com/kb/977453 gefunden werden. Das Update ist bereits Teil von Windows 2008 R2 SP1 (gefunden von here).

Während der Hotfix für mich in einer Umgebung mit Windows 2008 R2 funktionierte, kann er nicht auf Windows 2008 R2 mit SP1 angewendet werden. Leider kann das Problem in den Umgebungen, die auf SP1 ausgeführt werden, reproduziert werden und bleibt ungelöst. Ich habe einen neuen Fall in IIS-Foren für dieses Problem um http://forums.iis.net/t/1192310.aspx geöffnet und wird es stattdessen dort verfolgen.

Weitere Informationen zu diesem Thema lesen - Sie den Faden am http://forums.iis.net/p/1149787/1917288.aspx

+1

aktualisiert. Wir haben die gleiche Art von Fehler, aber unter Windows 2008 (nicht R2). Ich bin auch verwirrt, Sie sagten, dass "das Update bereits Teil von Windows 2008 R2 SP1 ist" und dann stellen Sie fest: "Leider kann das Problem in den Umgebungen, die auf SP1 laufen, reproduziert werden." ? –

+0

hast du das behoben? Ich habe ein sehr ähnliches Problem ... unter Windows 2008 R2 SP1 bleibt das Problem ... unter Windows 2008 R2, ich verwende den Hotfix und alles ist in Ordnung. –

Verwandte Themen