HTTP请求的内容长度>身体尺寸

时间:2012-09-30 15:08:23

标签: asp.net-mvc-3 http jquery iis-7 httpwebrequest

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

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

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

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

  • 缓存控制:无缓存
  • 连接:keep-alive
  • Pragma:no-cache
  • 内容长度:7301
  • Content-Type:application / json;字符集= UTF-8;
  • 接受:application / json,text / javascript, / ; Q = 0.01
  • 接受编码:gzip,deflate
  • 接受语言: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

1 个答案:

答案 0 :(得分:1)

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

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

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

要详细了解此问题,您可以按照http://forums.iis.net/p/1149787/1917288.aspx

中的主题进行操作