我正在管理一個網站,該網站在過去幾個月通過使用MVC 3.0 ASP.net構建的IIS 7.5上運行良好。無論何時,當我們的AJAX POST請求(通過jQuery解僱)失敗時,我們都會遇到問題,因爲發佈的JSON被截斷。內容HTTP請求的長度>正文大小
到目前爲止,我們發現的是,對於所有這樣的請求,請求的「Content-Length」標頭包含的數據比實際獲得的數據要多。
我們已經設置的maxRequestLength在我們的web.config 51200,我相信maxAllowedContentLength的價值有一個相當大的默認值(我們沒有設置在我們的配置)。此外,我有一個失敗的請求,其「內容長度」低至7301(字節),但我們只能得到2179字節。所以我並沒有懷疑這會受到任何限制。是
對有問題的請求請求頭如下
- 緩存控制:無緩存
- 連接:保持活躍
- 雜注:無緩存
- 內容長度:7301
- Content-Type:application/json;字符集= UTF-8;
- 接受:application/json,text/javascript,/; Q = 0.01
- 接受編碼:gzip,放氣
- 接受語言:EN-US,連接; Q = 0.5
- 的User-Agent:Mozilla的/ 5.0(Windows NT的6.1; WOW64; RV:15.0)壁虎/ 20100101火狐/ 15.0.1
- X-要求 - 由於:XMLHttpRequest的
任何想法?
更新:我已經能夠進一步從我們的代碼隔離問題。已經編寫了一個獨立的控制器,它接受一個JSON字符串並將其反序列化。如果發生錯誤,它會記錄錯誤。
當我在一個包含50個請求的循環中併發了150個併發線程的控制器時,我得到了一些失敗,這個控制器接收到的JSON被截斷。現在我們強烈關注優化IIS並閱讀更多關於可能相關的各種參數(目前我們正在使用IIS上的默認參數運行)。
我強烈地感覺到150個併發連接不應該是一個大問題,我真誠希望調整一些參數,我們應該能夠克服這個問題。一旦我們通過這個問題,將分享我的發現。
* 更新2(10月8日)*:我已經進一步縮小的問題。我在IIS打開錯誤日誌,發現我的失敗請求讀取數據時
BytesReceived = 0
ErrorCode = 2147943395
Error Description = "The I/O operation has been aborted because of either a thread exit or an application request.(0x800703e3)"
我發現有關IIS論壇此錯誤信息,但我還沒有與所給定的(複式)建議進行試驗得到下面的錯誤。下面的鏈接可以是一個很好的起點,在此
http://forums.iis.net/p/1149787/1917288.aspx
選中此http://stackoverflow.com/questions/10966328/the-json-request-was-too-large-to-be -deserialized/10969382#10969382 – VJAI
你知道內容被截斷的位置嗎?它在進入Ajax調用之前是否在瀏覽器中?是否將它寫入Ajax調用?它是否在HTTP傳輸?它發生在一些服務器端腳本中嗎? – pieman72
感謝您的回覆。 @Mark - 我不認爲這與JSON的大小有關(反序列化時我沒有得到最大大小錯誤)。不幸的是,我不知道數據在哪裏被截斷。我知道控制器正在截斷數據。我也知道發生這個問題的大部分時間,使用的瀏覽器都是IE 8.我仍然在調試,希望很快就能看到這個問題的底部 - 會發布我的發現。 –