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字节.所以我并不怀疑这会达到任何限制.
请求有问题请求的标头如下
有任何想法吗 ??
更新:我已经能够进一步将问题与我们的代码隔离开来.编写了一个独立的控制器,它接受一个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)建议.以下链接可以作为搜索更多内容的良好起点
我终于找出了原因并解决了解决方案。不幸的是,它并不适用于我的所有环境,但对生产环境有帮助。在下面查找详细信息
事实证明,这是由于 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上的线程