我遇到了与 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
对于任何重要的值,我的执行时间都非常长。
问题
我怀疑某种内置的服务节流机制或框架内置的并发连接限制。只有我发现与这种猜测有关的是,但我没有从那里尝试解决方案取得任何成功。
任何想法是什么问题?
谢谢。