HttpHandler低并发请求处理

时间:2014-01-16 11:42:19

标签: concurrency iis-7.5 httphandler

我有一个简单的.NET 4.5 HttpHandler,它似乎不能超过10个并发请求。我期待更高的数字。处理程序只执行一秒钟的休眠并返回一个简单的字符串。

concurrent requests   requests/minute
1                     60
8                     480
9                     540
10                    600
11                    600
12                    600
15                    600
32                    600
512                   600

我有一台64位Win7机器,配备4核i7,32GB内存和一块SSD,机器在所有测试中都处于空闲状态。 IIS配置为开箱即用。我也尝试使用IISTuner从Codeplex创建的应用程序池来运行它,但结果没有变化。

在true / false之间更改IsReusable不会做任何事情。

我在web.config中添加了一个条目来禁用会话状态。我正在使用SoapUI进行测试,并在每个请求标志设置后都有紧密连接(并且可以看到这反映在http标头中)。再一次,似乎没有任何改变。

修改每个应用程序池的进程数确实会增加数量,但仍然无法满足我预期的吞吐量(数百/数千个并发请求)。

这是处理程序:

class TestHandler : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        Thread.Sleep(1000);
        context.Response.Write("I slept for 1s");
    }

    public bool IsReusable { get { return true; } }
}

以下是关联的web.config文件:

<?xml version="1.0"?>
<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.5" />
    <httpRuntime targetFramework="4.5" />
    <sessionState mode="Off" timeout ="20" cookieless="false"></sessionState>
  </system.web>

  <system.webServer>
    <handlers>
      <add name="Proposal01_Test" verb="*"
        path="*.test"
        type="Proposal01.TestHandler, Proposal01"
        resourceType="Unspecified" />
    </handlers>
  </system.webServer>

</configuration>

我错过了什么?

1 个答案:

答案 0 :(得分:0)

问题出现在@Damien状态 - 再次感谢 - 这是Win7 / IIS7.5中的非服务器操作系统限制,我从未接受过,因为我们已经在相同的机器规模上将Java服务放入了成千上万的并发请求区域。 Yey MS。