0

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


我有序言

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

我正在尝试通过测试工具应用程序生成的请求来模拟 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 的每次命中都在
[0s; 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对于任何重要的值,我的执行时间都非常长。

问题
我怀疑某种内置的服务节流机制或框架内置的并发连接限制。只有我发现与这种猜测有关的是但我没有从那里尝试解决方案取得任何成功。
任何想法是什么问题?

谢谢。

4

2 回答 2

1

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

于 2013-10-30T00:30:01.717 回答
0

好吧,问题的根源在于 IIS + Windows 7 并发请求处理限制(有关此类限制的一些信息,请点击此处。将服务移到带有 Windows Server 的机器上解决了问题。

于 2013-11-09T20:05:27.593 回答