Tôi đang quản lý một trang web hoạt động tốt trong vài tháng qua trên IIS 7.5 được xây dựng với MVC 3.0 ASP.net. Mỗi bây giờ và sau đó chúng tôi đang đối mặt với một vấn đề khi yêu cầu AJAX POST của chúng tôi (được kích hoạt thông qua jQuery) không thành công khi JSON đang được đăng bị cắt bớt.Độ dài nội dung của yêu cầu HTTP> kích thước cơ thể
Những gì chúng tôi đã tìm thấy cho đến nay là đối với tất cả yêu cầu như vậy, tiêu đề "Nội dung dài" của yêu cầu có nhiều dữ liệu hơn chúng tôi thực sự nhận được yêu cầu.
Chúng tôi đã thiết maxRequestLength-51.200 trong web.config của chúng tôi và tôi tin rằng giá trị của maxAllowedContentLength có một giá trị mặc định khá lớn (chúng tôi đã không được thiết lập trong cấu hình của chúng tôi). Ngoài ra tôi có một yêu cầu không thành công với "Content-Length" thấp tới 7301 (byte) nhưng chúng tôi chỉ thu được 2179 byte của nó. Vì vậy, tôi không nghi ngờ điều này để đạt được bất kỳ giới hạn nào.
Request Headers cho một yêu cầu có vấn đề như sau
- Cache-Control: no-cache
- kết nối: giữ-sống
- pragma: no-cache
- Content-Length: 7301
- Loại nội dung: application/json; charset = utf-8;
- Chấp nhận: ứng dụng/json, văn bản/javascript, /; q = 0.01
- Accept-Encoding: gzip, deflate
- Ngôn ngữ Accept-: 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-yêu cầu-Với: XMLHttpRequest
Bất kỳ ý tưởng ??
Cập nhật: Tôi đã có thể để cô lập hơn nữa vấn đề từ mã của chúng tôi. Đã viết một bộ điều khiển độc lập chấp nhận một chuỗi JSON và chỉ deserializes nó. Trong trường hợp có lỗi, nó sẽ ghi lại lỗi.
Khi tôi nhấn bộ điều khiển này song song với 150 luồng đồng thời trong vòng lặp 50 yêu cầu thì tôi nhận được một vài lỗi mà JSON mà bộ điều khiển này nhận được bị cắt bớt. Bây giờ chúng ta tập trung mạnh vào việc tối ưu hóa IIS và đọc thêm về các tham số khác nhau có thể liên quan (hiện tại chúng ta đang chạy với các tham số mặc định trên IIS). Tôi cảm thấy rằng 150 kết nối đồng thời không nên là một vấn đề lớn và tôi chân thành hy vọng rằng điều chỉnh một số thông số chúng ta sẽ có thể vượt qua vấn đề này. Khi chúng tôi vượt qua vấn đề này, sẽ chia sẻ những phát hiện của tôi.
* Cập nhật 2 (tháng 8) *: Tôi đã tiếp tục thu hẹp xuống vấn đề.Tôi bật log lỗi trong IIS và phát hiện ra rằng yêu cầu không thành của tôi bị lỗi sau khi đọc dữ liệu
BytesReceived = 0
ErrorCode = 2147943395
Error Description = "The I/O operation has been aborted because of either a thread exit or an application request.(0x800703e3)"
Tôi đang tìm kiếm thông tin về lỗi này trên các diễn đàn IIS nhưng tôi chưa thử nghiệm với (mutliple) gợi ý được đưa ra. Các liên kết sau đây có thể là một điểm khởi đầu tốt đẹp để tìm kiếm thêm về điều này
http://forums.iis.net/p/1149787/1917288.aspx
Kiểm tra này http://stackoverflow.com/questions/10966328/the-json-request-was-too-large-to-be -deserialized/10969382 # 10969382 – VJAI
Bạn có biết bất kỳ nội dung nào đang được cắt ngắn không? Nó có trong trình duyệt trước khi nó được gọi tới Ajax không? Có phải là nó được viết bằng văn bản cho cuộc gọi Ajax? Là nó trong việc chuyển giao HTTP? Nó đang xảy ra trong một số kịch bản phía máy chủ? – pieman72
Cảm ơn bạn đã trả lời các bạn. @Mark - Tôi không nghĩ rằng điều này có liên quan đến kích thước của JSON (Tôi không nhận được lỗi kích thước tối đa trong khi deserialzing). Rất tiếc, tôi không biết dữ liệu bị cắt bớt ở đâu. Tôi biết rằng bộ điều khiển đang nhận được dữ liệu cắt ngắn. Tôi cũng biết rằng hầu hết thời gian khi sự cố này xảy ra, trình duyệt đang sử dụng là IE 8. Tôi vẫn đang gỡ lỗi và hy vọng sẽ sớm tìm ra vấn đề này - sẽ đăng các phát hiện của tôi. –