问题描述
|
我正在使用MVC 2中的长时间轮询来开发一个简单的陌生人聊天应用程序。如果我使用不同的浏览器打开应用程序,则在我的开发计算机中可以正常工作。
如果我在浏览器的两个选项卡(例如:IE)中应用了该应用程序,则不会从两个选项卡中启动长轮询。我的意思是,有一个开始按钮可以启动聊天,从而触发长轮询。我可以看到它在调试时调用操作。.我的问题是,当我从选项卡一个单击开始按钮时,它会触发ajax请求(长时间轮询(此请求在服务器上等待,直到另一个请求到来))。然后我单击选项卡二中的启动按钮,直到从服务器返回第一个请求(超时后),它才会触发ajax请求。
为什么会这样呢?我读到像浏览器将阻止多个ajax请求..那是原因吗? ..如果我使用不同的浏览器,效果很好。问题只在我在同一浏览器中使用两个标签时出现
解决方法
我读到像浏览器将阻止多个ajax请求。
是的,如果使用会话,则ASP.NET会阻止来自同一会话的并发请求。从文档引用:
访问ASP.NET会话状态为
每次会话独占,这意味着
如果两个不同的用户
并发请求,访问每个
授予单独的会话
同时。但是,如果两个
同时请求
同一会话(通过使用相同的会话
SessionID值),第一个请求
获得对该会话的独占访问权限
信息。第二个要求
仅在第一个请求之后执行
完成。 (第二届会议可以
如果独占锁也可以访问
上的信息被释放,因为
第一个请求超出了锁
超时。)如果EnableSessionState
@Page指令中的值已设置
为ReadOnly,对
只读会话信息不
导致对
会话数据。但是,只读
对会话数据的请求可能仍然
必须等待一个设置的锁
对会话数据的读写请求
明确。
另外,请确保已禁用缓存。例如,如果您使用jquery,则在轮询时使用
cache: false
选项:
$.ajax({
url: \'/poll\',cache: false,success: function(result) {
// ...
}
});