C# IIS排队请求?

C# IIS排队请求?,c#,iis,async-await,windows-10,C#,Iis,Async Await,Windows 10,我使用MvvmCross和Stephen Cleary优秀的AsyncEx库创建了一个Windows 10通用应用程序 更新27/10/2015 15:43-斯蒂芬回答了这个问题。经过测试并证明正确。 在视图中,我将ListView绑定到ViewModel中的属性,该属性异步加载名为AssignableTaskPlaceholderViewModel的占位符视图模型集合(使用AsyncEx功能) 数据来自我创建的一个Web API服务。 对于我的测试工具,集合中加载了12个AssignableT

我使用MvvmCross和Stephen Cleary优秀的AsyncEx库创建了一个Windows 10通用应用程序

更新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秒钟才能完成,即使每个方法调用都在做同样的事情

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

任务ID 105010011100000000000034373于2015年10月20日15:09:52开始

任务ID 105010011100000000000034398于2015年10月20日15:09:52开始

任务ID 105010011100000000000034402于2015年10月20日15:09:52开始

任务ID 105010011100000000000034407于2015年10月20日15:09:52开始

于2015年10月20日15:09:53开始执行任务ID 105010011100000000000034431

任务ID 105010011100000000000034433于2015年10月20日15:09:53开始

任务ID 105010011100000000000034454于2015年10月20日15:09:53开始

任务ID 105010011100000000000034479于2015年10月20日15:09:53开始

任务ID 105010011100000000000034483于2015年10月20日15:09:53开始

任务ID 105010011100000000000034488于2015年10月20日15:09:53开始

任务ID 105010011100000000000034512于2015年10月20日15:09:53开始

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

任务ID 105010011100000000000034514于2015年10月20日15:09:53开始

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

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

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

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

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

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

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

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

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

任务ID 105010011100000000000034433于2015年10月20日15:09:57结束

任务ID 105010011100000000000034431于2015年10月20日15:09:57结束

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

更多详细信息:

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

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。

如果启用了读/写会话模式,则ASP.NET将序列化请求。ASP.NET无论是同步的还是异步的,都会执行此操作。

最好共享一段复制代码,尤其是在这里,因为它涉及客户端和服务器。IIS一般不会对请求排队。非常感谢;删除会话处理修复了该问题。现在正按照我的预期工作。@SergRogovtsev:请参阅,特别是“并发请求和会话状态”一节。非常感谢!序列化是在整个HTTP请求级别完成的,还是在
会话
访问时完成的?