【发布时间】:2013-11-09 09:18:06
【问题描述】:
我遇到了与 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 的每次命中都开始于
[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 值,我的执行时间都非常长。
问题
我怀疑某种内置的服务节流机制或框架内置的并发连接限制。只有我发现与这种猜测相关的是that,但我没有从那里尝试解决方案取得任何成功。
有什么想法吗?
谢谢。
【问题讨论】:
-
在了解负载测试工具的工作原理时,构建负载测试工具是一种很好的做法,但使用现有工具完成此类工作几乎总是更有效率。以SoapUI 为例(有几个)。
标签: c# asp.net-web-api