Ajax HTTP请求未命中控制器

Ajax HTTP请求未命中控制器,ajax,asp.net-mvc,http,Ajax,Asp.net Mvc,Http,我目前遇到一个问题,我向.NET控制器发送一个异步ajax请求以启动数据库搜索。该请求发送到服务器,服务器启动搜索并立即(不到一秒)用搜索ID回复回调,此时我开始每10秒发送一次ajax请求,以检查搜索是否完成。此方法运行良好,并已成功地通过多个用户同时发送请求进行了测试 如果我在第一次搜索完成之前从同一用户发送第二次搜索请求,则在第一次搜索完成之前,此调用不会发送到控制器端点,这可能需要一分钟的时间。我可以在dev工具中看到请求离开chrome(或FF/IE),并且使用Fiddler作为代理,

我目前遇到一个问题,我向.NET控制器发送一个异步ajax请求以启动数据库搜索。该请求发送到服务器,服务器启动搜索并立即(不到一秒)用搜索ID回复回调,此时我开始每10秒发送一次ajax请求,以检查搜索是否完成。此方法运行良好,并已成功地通过多个用户同时发送请求进行了测试

如果我在第一次搜索完成之前从同一用户发送第二次搜索请求,则在第一次搜索完成之前,此调用不会发送到控制器端点,这可能需要一分钟的时间。我可以在dev工具中看到请求离开chrome(或FF/IE),并且使用Fiddler作为代理,我可以看到请求击中了运行应用程序的机器,但是在第一次调用返回之前,它不会击中端点第一行的断点


在该调用被阻止时,通常有多达3个来自浏览器的挂起请求。IIS或.NET体系结构是否有某种机制对我的请求进行排队?或者如果没有,在离开代理的请求和进入控制器之间还有什么区别?我有点不知道如何调试它。

我找到了问题所在。事实证明,尽管我的端点是异步定义的,但ASP.NET控制器默认情况下是按会话同步的。因此,虽然我的端点能够跨会话同时执行,但在同一会话中,一次只允许一个调用。我可以通过将controller SessionState属性设置为只读来解决这个问题,允许我的调用在不阻塞的情况下通过

[SessionState(System.Web.SessionState.SessionStateBehavior.ReadOnly)]