Zarządzam stroną internetową, która działa dobrze przez ostatnie kilka miesięcy nad IIS 7.5 zbudowanym przy pomocy MVC 3.0 ASP.net. Od czasu do czasu napotykamy problem, gdy nasze żądanie AJAX POST (uruchamiane przez jQuery) nie powiedzie się, ponieważ wysłany JSON jest przycinany.Długość zawartości żądania HTTP> rozmiar ciała
Do tej pory stwierdziliśmy, że w przypadku wszystkich takich żądań nagłówek "Długość treści" żądania zawiera więcej danych niż faktycznie otrzymujemy w żądaniu.
Mamy już maxRequestLength do 51200 w naszym web.config i wierzę wartość maxAllowedContentLength ma dość dużą wartość domyślną (nie został ustawiony, że w naszej konfiguracji). Mam również nieudane żądanie z "Content-Length" tak niskie, jak 7301 (bajty), ale udało nam się uzyskać tylko 2179 bajtów. Więc nie podejrzewam, że to trafia w jakiś limit.
Żądanie Nagłówki dla problematycznej wniosku są następujące
- Cache-Control: no-cache
- Connection: keep-alive
- Pragma: no-cache
- Content-Length: 7301
- Content-Type: application/json; charset = utf-8;
- Zaakceptuj: aplikacja/json, tekst/javascript, /; q = 0,01
- Accept-Encoding: gzip, deflate
- Accept-Language: en-us, 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
Jakieś pomysły ??
Aktualizacja: byłem w stanie dalej wyizolować problem z naszym kodzie. Napisałem niezależny kontroler, który akceptuje ciąg JSON i po prostu deserializuje go. W przypadku błędu rejestruje błąd.
Kiedy uderzę w kontroler równolegle ze 150 równoczesnymi wątkami w pętli złożonej z 50 żądań, otrzymam kilka błędów, w których skasowany jest JSON, który otrzymuje ten kontroler. Teraz mocno koncentrujemy się na optymalizacji IIS i czytaniu więcej o różnych parametrach, które mogą być powiązane (obecnie pracujemy z domyślnymi parametrami na IIS).
Jestem przekonany, że 150 równoległych połączeń nie powinno być zbyt wielkim problemem i mam szczerą nadzieję, że dostrojone parametry pozwolą nam ominąć ten problem. Gdy miniemy ten problem, podzielę się moimi odkryciami.
* Update 2 (8 października) *: Ja dodatkowo zawężony problemu.Włączyłem dzienniku błędów w IIS i odkrył, że moje zawiodły prośba dostaje następujący błąd podczas odczytu danych
BytesReceived = 0
ErrorCode = 2147943395
Error Description = "The I/O operation has been aborted because of either a thread exit or an application request.(0x800703e3)"
jestem znalezienie informacji o tym błędzie na forach IIS, ale jestem jeszcze eksperymentować z nich otrzymuje (mutliple) sugestie. Poniższy link może być dobrym punktem wyjścia do poszukiwania bardziej na tym
http://forums.iis.net/p/1149787/1917288.aspx
sprawdzić ten http://stackoverflow.com/questions/10966328/the-json-request-was-too-large-to-be -deserialized/10969382 # 10969382 – VJAI
Czy masz pojęcie, gdzie zawartość jest obcięta? Czy jest w przeglądarce, zanim dostanie się do połączenia Ajax? Czy jest tak, jak jest napisane do wywołania Ajax? Czy to jest w transferze HTTP? Czy dzieje się to w jakimś skrypcie po stronie serwera? – pieman72
Dzięki za odpowiedzi. @Mark - Nie sądzę, że jest to związane z rozmiarem JSON (nie dostaję maksymalnego błędu podczas odstąpienia od umowy). Niestety nie wiem, gdzie dane są przycinane. Wiem, że kontroler uzyskuje skrócone dane. Wiem też, że w większości przypadków, kiedy ten problem występuje, używaną przeglądarką jest IE 8. Wciąż debuguję i mam nadzieję, że niedługo przejdę do sedna tego problemu - opublikuję moje wyniki. –