我遇到了与Web服务请求处理相关的下一个问题:
序言
我有
我试图通过使用测试工具应用程序生成的请求点击一个来模拟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,但是我没有在那里尝试成功的任何成功。
任何想法是什么问题?
感谢。
答案 0 :(得分:1)
默认情况下,ASP.NET上的HTTP请求限制为内核数量的12倍。我建议将ServicePointManager.DefaultConnectionLimit
设置为int.MaxValue
。
答案 1 :(得分:0)
嗯,问题的根源在于IIS + Windows 7并发请求处理限制(有关此类限制的一些信息here。将服务移出到使用Windows Server的计算机时就解决了问题。