2012-09-30 12 views
6

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

+0

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

+0

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

+0

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

Odpowiedz

1

I w końcu zorientowali się, przyczyny i poprawki do rozwiązania. Niestety nie dotyczy to wszystkich moich środowisk, ale pomaga w środowisku produkcyjnym. Znajdź szczegóły poniżej

Jest to spowodowane błędem w systemie Windows 2008 R2, w którym sprawia, że ​​asp.net wierzy, że klient odłączył się, nawet jeśli nie. Poprawka tego samego jest dostępna i można ją znaleźć pod adresem http://support.microsoft.com/kb/977453. Poprawka jest już częścią systemu Windows 2008 R2 z dodatkiem SP1 (znajdującą się pod adresem here).

Podczas gdy poprawka działała dla mnie w jednym środowisku z systemem Windows 2008 R2, nie można go zastosować do systemu Windows 2008 R2 z dodatkiem SP1. Niestety problem nadal może być powielany w środowiskach z systemem SP1 i pozostaje nierozwiązany. Otworzyłem nową sprawę na forach IIS dla tego problemu pod numerem http://forums.iis.net/t/1192310.aspx i zamiast tego sledzę ją.

Aby dowiedzieć się więcej na ten temat - można śledzić wątek na http://forums.iis.net/p/1149787/1917288.aspx

+1

Występuje taki sam błąd, ale w systemie Windows 2008 (nie R2). Ponadto, jestem zdezorientowany, powiedziałeś, że "poprawka jest już częścią Windows 2008 R2 SP1", a następnie oświadczasz "niestety problem wciąż może być powielany w środowiskach z dodatkiem SP1". ? –

+0

czy to naprawiłeś? Mam bardzo podobny problem ... w systemie Windows 2008 R2 SP1 problem pozostaje ... w systemie Windows 2008 R2, stosuję poprawkę i wszystko jest w porządku. –

Powiązane problemy