Ajax长轮询无法正常工作

Nul*_*ter 4 asp.net-mvc jquery long-polling asp.net-mvc-2 long-integer

我正在使用MVC 2中的长轮询开发一个简单的陌生人聊天应用程序.如果我打开应用程序不同的浏览器,它在我的开发机器上工作正常..我的意思是如果我在IE和Mozilla中加载应用程序,它工作正常

如果我在浏览器的两个选项卡中使用该应用程序(例如:IE),则不会从两个选项卡中触发长轮询...我的意思是,有一个开始按钮来启动聊天,这会触发长时间轮询.我可以看到它在调试时调用动作..而我的问题是,当我从第一个选项卡中单击启动按钮时,它会触发ajax请求(长轮询(此请求在服务器上等待,直到另一个请求来))然后我单击在选项卡2中的启动按钮,它不会触发ajax请求,直到从服务器返回第一个请求(超时后).

为什么会这样?我阅读像浏览器将阻止多个ajax请求..这是一个原因吗?..如果我使用不同的浏览器,它工作正常.只有在同一个浏览器中选择了两个选项卡才会出现问题

Dar*_*rov 6

我读过像浏览器会阻止多个ajax请求.

是的,如果您使用会话,ASP.NET会阻止来自同一会话的并发请求.从文档中引用:

对会话状态的访问是每个会话独占的,这意味着如果两个不同的用户发出并发请求,则同时授予对每个单独会话的访问权限.但是,如果对同一会话发出两个并发请求(通过使用相同的SessionID值),则第一个请求将获得对会话信息的独占访问权.第二个请求仅在第一个请求完成后执行.(如果由于第一个请求超过锁定超时而释放信息的独占锁定,则第二个会话也可以访问.)如果@ Page指令中的EnableSessionState值设置为ReadOnly,则只读请求会话信息不会导致会话数据的独占锁定.但是,会话数据的只读请求可能仍然必须等待由会话数据的读写请求设置的锁定才能清除.

还要确保已禁用缓存.例如,如果使用jquery,则cache: false在轮询时使用该选项:

$.ajax({
    url: '/poll',
    cache: false,
    success: function(result) {
        // ...
    }
});
Run Code Online (Sandbox Code Playgroud)