IIS排队请求?

时间:2015-10-27 15:17:00

标签: c# iis async-await windows-10

我使用MvvmCross和Stephen Cleary优秀的AsyncEx库创建了一个Windows 10 Universal App。

更新27/10/2015 15:43 - 斯蒂芬回答了这个问题。经过测试并证明是正确的。

在视图中,我将ListView绑定到ViewModel中的一个属性,该属性异步加载一个名为AssignableTaskPlaceholderViewModel的占位符视图模型集合(使用AsyncEx功能)。

数据来自我也创建的Web API服务。 对于我的测试工具,该集合加载了12个AssignableTaskPlaceholderViewModel,每个都只保存一个ID值。

然后,ListView项的DataTemplate将元素绑定到AssignableTaskPlaceholderViewModel上名为AssignableTaskViewModel的属性。这异步调用另一个Web API方法来返回详细数据(再次使用AsyncEx功能)。此方法当前正在返回模拟数据。

当我运行应用程序时,我希望看到:

1)占位符集合的初始加载需要花费少量时间,然后

2)列表中每个项目的详细数据同时,大​​约花费相同的时间来加载数据。

我实际看到的是正在加载的详细数据顺序,即看起来IIS正在对请求进行排队,一次处理一个请求。

下面显示的是一些调试数据,它显示初始请求在一秒内处理,响应需要0到4秒才能完成,即使每个方法调用都在做同样的事情。

我的问题是:为什么会发生这种情况?

在20/10/2015 15:09:52开始执行任务ID 1050100111000000000034373

在20/10/2015 15:09:52开始执行任务ID 1050100111000000000034398

在20/10/2015 15:09:52开始执行任务ID 1050100111000000000034402

在20/10/2015 15:09:52开始执行任务ID 1050100111000000000034407

20/10/2015 15:09:53开始执行任务ID 1050100111000000000034431

在20/10/2015 15:09:53开始执行任务ID 1050100111000000000034433

在20/10/2015 15:09:53开始执行任务ID 1050100111000000000034454

在20/10/2015 15:09:53开始执行任务ID 1050100111000000000034479

在20/10/2015 15:09:53开始执行任务ID 1050100111000000000034483

在20/10/2015 15:09:53开始执行任务ID 1050100111000000000034488

在20/10/2015 15:09:53开始执行任务ID 1050100111000000000034512

2015年10月20日15:09:53结束任务ID 1050100111000000000034373

在20/10/2015 15:09:53开始执行任务ID 1050100111000000000034514

2015年10月20日15:09:53结束任务ID 1050100111000000000034512

2015年10月20日15:09:53结束任务ID 1050100111000000000034514

2015年10月20日15:09:53结束任务ID 1050100111000000000034402

2015年10月20日15:09:54结束任务ID 1050100111000000000034407

2015年10月20日15:09:54结束任务ID 1050100111000000000034398

20/10/2015 15:09:55结束任务ID 1050100111000000000034483

2015年10月20日15:09:55结束任务ID 1050100111000000000034479

2015年10月20日15:09:56结束任务ID 1050100111000000000034488

2015年10月20日15:09:56结束任务ID 1050100111000000000034454

在20/10/2015 15:09:57结束任务ID 1050100111000000000034433

在20/10/2015 15:09:57结束任务ID 1050100111000000000034431

如果我使用假数据(而不是完全调用Web API方法),故意添加延迟,我可以看到View / ViewModel / AsyncEx管道工作正常。

更多详情:

1)我正在使用 Windows.Web.Http.HttpClient 调用Web API。我为所有Web API方法调用使用了一个HttpClient实例(我认为这是最佳实践)。

2)Web API方法调用不需要身份验证或HTTPS连接。

3)对于HttpBaseProtocolFilter(用于HTTPClient),我将MaxConnectionsPerServer设置为100。

4)Web API项目的目标是.Net 4.6(targetFramework =" 4.6")。我相信这个版本的.Net并不限制与服务器的连接数,即无需将其添加到web.config :.

5)我在客户端应用程序和Web API方法中都“一直”使用Async / Await。

6)在Web API项目中启用了会话。

7)我在Win 10开发PC上运行IIS 10.

1 个答案:

答案 0 :(得分:2)

如果启用了读/写会话模式,则ASP.NET将序列化请求。无论是同步还是异步,ASP.NET都会这样做。