2012-09-30 40 views
6

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

+0

Kiểm tra này http://stackoverflow.com/questions/10966328/the-json-request-was-too-large-to-be -deserialized/10969382 # 10969382 – VJAI

+0

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

+0

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

Trả lời

1

cuối cùng tôi đã tìm ra nguyên nhân và sửa chữa cho các giải pháp. Thật không may, nó không áp dụng cho tất cả các môi trường của tôi nhưng giúp môi trường sản xuất. Tìm chi tiết bên dưới

Điều này hóa ra là do lỗi trong Windows 2008 R2, điều này khiến asp.net tin rằng một khách hàng đã bị ngắt kết nối ngay cả khi không có. Một hotfix cho cùng có sẵn và có thể được tìm thấy tại http://support.microsoft.com/kb/977453. Bản sửa lỗi đã là một phần của Windows 2008 R2 SP1 (được tìm thấy từ here).

Trong khi hotfix hoạt động cho tôi trên một môi trường đang chạy Windows 2008 R2, nó không thể được áp dụng cho Windows 2008 R2 với SP1. Rất tiếc, sự cố vẫn có thể được sao chép trên các môi trường chạy trên SP1 và vẫn chưa được giải quyết. Tôi đã mở một trường hợp mới trên diễn đàn IIS cho vấn đề này tại http://forums.iis.net/t/1192310.aspx và sẽ theo dõi nó ở đó để thay thế.

Để tìm hiểu thêm về vấn đề này - bạn có thể làm theo các chủ đề tại http://forums.iis.net/p/1149787/1917288.aspx

+1

Chúng tôi có cùng loại lỗi, nhưng trên Windows 2008 (không phải R2). Ngoài ra, tôi là nhầm lẫn, bạn nói rằng "sửa chữa đã là một phần của Windows 2008 R2 SP1" và sau đó bạn nhà nước "tiếc là vấn đề vẫn có thể được sao chép trên các môi trường đang chạy trên SP1." ? –

+0

bạn đã sửa lỗi này chưa? Tôi đang có một vấn đề rất giống nhau ... trên Windows 2008 R2 SP1 vấn đề vẫn còn ... trên Windows 2008 R2, tôi áp dụng các hotfix và tất cả mọi thứ là tốt. –

Các vấn đề liên quan