2014-03-26 52 views
0

我目前有一个问题,我发送一个异步AJAX请求到.NET控制器,以便开始数据库搜索。这个请求将它传递给启动搜索的服务器,并立即(不到一秒)用搜索ID回复回调,此时我开始每隔10秒发送一次Ajax请求以检查搜索是否完成。此方法正常工作,并已成功通过多个用户发送同时请求进行测试。HTTP请求不击中控制器

如果我把第一次搜索结束前相同用户的第二搜索请求,此调用不会使它的控制端点,直到第一次搜索完成后,这可能需要长达一分钟。我可以在开发工具中看到请求离开chrome(或FF/IE),并使用Fiddler作为代理,我可以看到请求点击应用程序正在运行的计算机,但是它不会触及第一行的断点直到第一次调用返回之前。

在该呼叫被阻塞点,通常有至多从浏览器3个的未决请求。 IIS或.NET架构是否有一些排队请求的机制?或者,如果没有,请求离开代理和进入控制器之间还有什么?我在如何调试这个方面有点不知所措。

回答

0

我能够找到问题。事实证明,尽管我的端点是异步定义的,ASP.NET控制器默认按会话进行同步。因此,虽然我的端点能够跨会话同时执行,但在同一会话中,一次只允许一个呼叫。我能够通过将控制器SessionState属性设置为只读来解决此问题,从而允许我的呼叫不受阻塞地通过。

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