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

Gun*_*hai 6 jquery iis-7 http httpwebrequest asp.net-mvc-3

我正在管理一个网站,该网站在过去几个月通过使用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)"
Run Code Online (Sandbox Code Playgroud)

我在iis论坛上找到有关此错误的信息,但我还没有尝试给出(mutliple)建议.以下链接可以作为搜索更多内容的良好起点

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

Gun*_*hai 1

我终于找出了原因并解决了解决方案。不幸的是,它并不适用于我的所有环境,但对生产环境有帮助。在下面查找详细信息

事实证明,这是由于 Windows 2008 R2 中的一个错误造成的,该错误使 ASP.NET 认为客户端已断开连接,即使客户端并未断开连接。可以在http://support.microsoft.com/kb/977453找到相同的修补程序。该修复已包含在 Windows 2008 R2 SP1 中(可从此处找到)。

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

要了解有关此问题的更多信息 - 您可以关注http://forums.iis.net/p/1149787/1917288.aspx上的线程