2011-05-26 84 views
3

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

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

为什么会发生这种情况?我像浏览器读取会阻止多个Ajax请求。这是一个原因吗? ..它工作得很好,如果我使用不同的浏览器。问题只出现,如果我在同一浏览器中采取两个标签

+1

只是一个猜测,但你确信的响应不会与'Response.Cache.SetCacheability(HttpCacheability.NoCache)'缓存?我建议使用[fiddler](http://fiddler2.com)来调试是否正在创建请求。 – emfurry 2011-05-27 05:02:16

回答

5

我读如浏览器将阻止多个ajax请求。

是的,如果您使用会话,ASP.NET将阻止来自同一会话的并发请求。从documentation报价:

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

另外请确保您禁用了缓存。例如,如果你使用jQuery使用cache: false选项时投票:

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