Windows 7上的IIS 7.5与来自python / php的POST请求有交错的挂起

我试图在Windows 7上跟踪IIS 7.5的一个非常奇怪的错误。首先,这是一些上下文。

我有一个非常简单的ASP.NET Web应用程序与以下代码:

<?xml version="1.0" encoding="utf-8" ?> <configuration> <system.web> <customErrors mode="Off"/> </system.web> </configuration> <%@ Page Language="C#" Inherits="_Default" CodeFile="default.aspx.cs" %> <html> <body> <h1><asp:literal runat="server" id="litHeading1" /></h1> <form runat="server"> <asp:TextBox id="tbInput" runat="server" /> <asp:Button id="btnSubmit" Text="Submit" runat="server" /> </form> </body> </html> public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if( IsPostBack ) { litHeading1.Text = "Posted! Hi, " + tbInput.Text; } else { litHeading1.Text = "Get"; } } } 

我也有一个非常简单的Python脚本来打这个页面并发布到它:

 import requests as reqm url = 'http://localhost/testapp4.0/default.aspx' post_payload = { # post values don't seem to matter, having them or not having them # doesn't seem to affect the problem '__VIEWSTATE': r"/wEPDwUKMTU1MDMxMzU0MQ9kFgICAQ8WAh4EVGV4dAUDR2V0ZGShYB/fzaT/YSTSt7FPGhIQcCrp1GbI+eD2bLFl1qUxWA==", '__EVENTVALIDATION': r"/wEWAwLT5c/kDALpouS8DQLCi9reA+DdtetcF6QuZcTZOdNPIJzwWkvX+ITpSzlbXCsWVizl", 'tbInput': 'fred', 'btnSubmit': 'Submit', } def doit(): req = reqm.post(url, data=post_payload) print(req.text) # if it doesn't show up in one run, bump value to # 500 or so for x in range(1): doit() 

所以有什么问题?

问题是,IIS正在频繁地丢弃连接,但仅在执行POST操作时。 如果将脚本更改为使用GET操作,则不会看到任何问题。

示例IIS日志文件:

 2012-11-28 00:48:57 ::1 POST /testapp4.0/default.aspx - 80 - ::1 python-requests/0.14.0+CPython/2.7.2+Windows/7 400 0 64 6767 

示例IIS跟踪文件:

https://gist.github.com/4158347

示例来自Python请求的IIS HTTP.err:

 2012-11-28 00:44:16 ::1%0 53528 ::1%0 80 HTTP/1.1 POST /testapp4.0/default.aspx - 1 Timer_EntityBody Classic+.NET+AppPool 2012-11-28 01:16:03 ::1%0 53928 ::1%0 80 HTTP/1.1 POST /testapp4.0/default.aspx - 1 Timer_EntityBody .NET+4.0 

同上,但从一个失败的PHP请求:

 2012-11-28 01:19:33 ::1%0 53942 ::1%0 80 - POST /testapp4.0/default.aspx - - Timer_HeaderWait - 

我已经做了各种尝试和隔离的迭代

无论我尝试了什么,我都看到问题出现:

  • ASP.NET 2.0 vs 4.0
  • 多台Windows 7 Pro机器,一台虚拟机,一台笔记本电脑
  • 本地主机stream量vs通过networking
  • 经典和集成模式
  • Python 2.7,3.3,PHP 5.4客户端脚本(从Windows和Linux运行)
  • IIS Express
  • 在脚本循环中请求之间放置1秒的延迟
  • 变化我发布的参数。 从完全准确的视图状态等到“foo = bar”
  • closuresWindows防火墙

间歇性

  • 在最长的时间里,Python脚本总是会在第一个请求中出错。 然后,一旦有一段时间,他们会开始工作,大部分时间都在工作。 如果我然后把脚本放在一个紧密的循环中,服务器很快就会挂起。
  • 最初,PHP脚本始终在第一个请求上工作,但是在紧密的循环中也始终失败。

parsing度:

  • 使用Windows 2003服务器(IIS 6),500行请求没有问题
  • 当我可以告诉脚本已经挂起,但还没有出错时,我杀死脚本,接下来的几个请求通常会工作。
    • 如果我让它超时而不是杀死它,并尝试再次运行脚本,它通常会在紧接着的下一个请求中再次挂起。

限速?

我想知道这是否可能是在Windows 7上的IIS 7.5中的某种速度限制问题。我读它有一定的限制,因为它不在服务器操作系统上运行。 但是,这并不能解释为什么我在运行非常不频繁的请求时仍然会看到问题。

为什么这是一个问题?

我试图对WebForms .NET应用程序运行functiontesting。 正如你所想象的,经常掉线的连接正在对我的testing破坏!

我花了几天的时间解决这个问题,将非常感激的一些帮助!

哇,刚做了另一个谷歌search,遇到一个提到AVG的家伙。 一个灯熄灭,我彻底禁用了我的AVG,问题消失了。 进一步的testing显示问题与LinkScannerfunction。

我很早就考虑过AVG,但由于我没有互联网安全版本,所以我认为它不会有影响。 我非常后悔这个假设!