HTTP请求的内容长度>正文大小

我正在管理一个网站,该网站在过去几个月通过使用MVC 3.0 ASP.net构建的IIS 7.5运行良好。 当我们的AJAX POST请求(通过jQuery触发)因发布的JSON被截断而失败时,我们时不时会遇到问题。

到目前为止我们发现的是,对于所有这样的请求,请求的“Content-Length”标头包含的数据多于我们实际获得的请求数据。

我们已经在web.config中将maxRequestLength设置为51200,我相信maxAllowedContentLength的值有一个非常大的默认值(我们没有在我们的配置中设置它)。 我还有一个失败的请求,“内容长度”低至7301(字节),但我们设法只获得了2179个字节。 所以我并不怀疑这会达到任何限制。

请求有问题请求的标头如下

  • 缓存控制:无缓存
  • 连接:保持活力
  • Pragma:没有缓存
  • 内容长度:7301
  • Content-Type:application / json; 字符集= UTF-8;
  • 接受:application / json,text / 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

有任何想法吗 ??


更新 :我已经能够进一步将问题与我们的代码隔离开来。 编写了一个独立的控制器,它接受一个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论坛上找到有关此错误的信息,但我还没有尝试给出(mutliple)建议。 以下链接可以作为搜索更多内容的良好起点

http://forums.iis.net/p/1149787/1917288.aspx

我终于弄明白了解决方案的原因和解决方法。 不幸的是,它不适用于我的所有环境,但有助于生产环境。 详情如下

原来这是由于Windows 2008 R2中的一个错误,它让asp.net相信客户端已经断开连接,即使它没有断开连接。 可以找到相同的修补程序,可以在http://support.microsoft.com/kb/977453上找到。 该修复程序已经是Windows 2008 R2 SP1的一部分(可从此处找到)。

虽然此修补程序适用于运行Windows 2008 R2的一个环境,但它无法应用于带有SP1的Windows 2008 R2。 不幸的是,问题仍然可以在SP1上运行的环境中重现,并且仍未解决。 我在http://forums.iis.net/t/1192310.aspx上针对此问题在IIS论坛上打开了一个新案例,并将在那里跟踪它。

要了解有关此问题的更多信息,请访问http://forums.iis.net/p/1149787/1917288.aspx上的主题