Ajax长轮询无法正常工作

时间:2011-05-26 19:09:07

标签: asp.net-mvc asp.net-mvc-2 jquery long-integer long-polling

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

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

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

1 个答案:

答案 0 :(得分:6)

  

我读过像浏览器一样会阻止多个ajax请求。

是的,如果使用会话,ASP.NET会阻止来自同一会话的并发请求。引自documentation

  

访问ASP.NET会话状态是   每次会议独享,这意味着   如果有两个不同的用户   并发请求,访问每个   单独的会话被授予   同时。但是,如果两个   并发请求是为了   同一会话(使用相同的会话   SessionID值),第一个请求   获得对会话的独占访问权限   信息。第二个请求   仅在第一个请求之后执行   完了。 (第二次会议可以   如果独占锁也可以访问   因为信息被释放了   第一个请求超过锁定   超时。)如果是EnableSessionState   @ Page指令中的值已设置   ReadOnly,请求   只读会话信息没有   导致独占锁定   会话数据。但是,只读   会话数据的请求可能仍然存在   必须等待一个锁定   会话数据的读写请求   清楚。

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

$.ajax({
    url: '/poll',
    cache: false,
    success: function(result) {
        // ...
    }
});