我正在管理一个网站,该网站在过去几个月通过使用 MVC 3.0 ASP.net 构建的 IIS 7.5 运行良好。当我们的 AJAX POST 请求(通过 jQuery 触发)失败时,我们会时不时地面临一个问题,因为正在发布的 JSON 被截断。
到目前为止,我们发现对于所有此类请求,请求的“Content-Length”标头包含的数据比我们实际在请求中获得的数据多。
我们已经在 web.config 中将maxRequestLength设置为 51200,并且我相信maxAllowedContentLength的值有一个相当大的默认值(我们没有在我们的配置中设置它)。我也有一个失败的请求,“内容长度”低至 7301(字节),但我们设法只得到了 2179 个字节。所以我不怀疑这会达到任何限制。
有问题的请求的请求标头如下
- 缓存控制:无缓存
- 连接:保持活动
- Pragma:无缓存
- 内容长度:7301
- 内容类型:应用程序/json;字符集=utf-8;
- 接受:应用程序/json、文本/javascript、/;q=0.01
- 接受编码:gzip,放气
- 接受语言:en-us,en;q=0.5
- 用户代理:Mozilla/5.0 (Windows NT 6.1; WOW64; rv:15.0) Gecko/20100101 Firefox/15.0.1
- X-Requested-With: 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 论坛上找到有关此错误的信息,但尚未尝试给出(多个)建议。以下链接可以作为搜索更多内容的良好起点