Web服务并发调用处理

时间:2013-10-30 00:00:24

标签: c# asp.net-web-api

我遇到了与Web服务请求处理相关的下一个问题:

序言
我有

  • 在本地计算机上的IIS 7.0上托管的Web api服务
  • 在同一台计算机上测试线束控制台应用程序

我试图通过使用测试工具应用程序生成的请求点击一个来模拟Web服务负载。 测试线程核心代码:

    static int HitsCount = 40;

    static async void PerformHitting()
    {
        {
            await Task.WhenAll(ParallelEnumerable.Range(0, HitsCount)
                                                 .Select(_ => HitAsync())
                                                 .WithDegreeOfParallelism(HitsCount));
        }
    }

    static async Task HitAsync()
    {
        // some logging skipped here
        ...
        await new HttpClient().GetAsync(TargetUrl, HttpCompletionOption.ResponseHeadersRead);
    }

期望
记录显示所有HitAsync()调用都是同时进行的:通过HttpClients进行的每次命中都是在 [0; 0.1s]时间范围(时间在这里和下面大致舍入)。因此,我期望在Web服务端的大致相同的时间范围内捕获所有这些请求。

现实
但是,登录服务端显示分组为8-12的请求每个请求,服务以约1秒的间隔捕获这些串。我的意思是:

[0s, 0.3s] <- requests #0-#10
[1.2s, 1.6s] <- requests #10-#20
...
[4.1s, 4.5s] <- request #30-#40

对于任何重要的HitCount值,我的执行时间非常长。

问题
我怀疑某种内置服务限制机制或框架内置并发连接限制。只有我发现与这种猜测相关的是that,但是我没有在那里尝试成功的任何成功。
任何想法是什么问题?

感谢。

2 个答案:

答案 0 :(得分:1)

默认情况下,ASP.NET上的HTTP请求限制为内核数量的12倍。我建议将ServicePointManager.DefaultConnectionLimit设置为int.MaxValue

答案 1 :(得分:0)

嗯,问题的根源在于IIS + Windows 7并发请求处理限制(有关此类限制的一些信息here。将服务移出到使用Windows Server的计算机时就解决了问题。