我正在管理一个网站,该网站在过去几个月通过使用MVC 3.0 ASP.net构建的IIS 7.5运行良好。当我们的AJAX POST请求(通过jQuery触发)因发布的JSON被截断而失败时,我们时不时会遇到问题。
到目前为止,我们发现,对于所有此类请求,请求的“Content-Length”标头包含的数据多于我们实际获得的请求数据。
我们已经在web.config中将 maxRequestLength 设置为51200,我相信 maxAllowedContentLength 的值有一个非常大的默认值(我们没有设置在我们的配置中)。此外,我有一个失败的请求,“内容长度”低至7301(字节),但我们设法只获得2179字节。所以我并不怀疑这会达到任何限制。
请求有问题请求的标头如下
任何想法??
更新:我已经能够进一步将问题与我们的代码隔离开来。编写了一个独立的控制器,它接受一个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)建议。以下链接可以作为更好地搜索此
的良好起点答案 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
中的主题进行操作