Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc Ajax长轮询无法正常工作_Asp.net Mvc_Asp.net Mvc 2_Jquery_Long Integer_Long Polling - Fatal编程技术网

Asp.net mvc Ajax长轮询无法正常工作

Asp.net mvc Ajax长轮询无法正常工作,asp.net-mvc,asp.net-mvc-2,jquery,long-integer,long-polling,Asp.net Mvc,Asp.net Mvc 2,Jquery,Long Integer,Long Polling,我正在MVC2中使用长轮询开发一个简单的陌生人聊天应用程序。如果我在不同的浏览器中打开应用程序,它在我的开发机器中运行良好。。我的意思是,如果我在IE和mozilla中加载应用程序,它可以正常工作 如果我在浏览器的两个选项卡(例如:IE)中使用应用程序,则长轮询不会同时从两个选项卡启动。。我的意思是,有一个启动按钮来启动聊天,启动长轮询。我可以看到它在调试时调用操作。。我的问题是,当我单击选项卡1中的开始按钮时,它会触发一个ajax请求(长轮询(这个请求在服务器上等待,直到另一个请求出现))。然

我正在MVC2中使用长轮询开发一个简单的陌生人聊天应用程序。如果我在不同的浏览器中打开应用程序,它在我的开发机器中运行良好。。我的意思是,如果我在IE和mozilla中加载应用程序,它可以正常工作

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

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

我认为浏览器会阻止多个ajax请求

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

无法访问ASP.NET会话状态 每个会话独占,这意味着 如果两个不同的用户 并发请求,访问每个 允许单独举行会议 同时但是如果两个 并发请求是针对 相同会话(通过使用相同的 SessionID值),第一个请求 获取对会话的独占访问权限 信息。第二个请求 仅在第一个请求之后执行 完成了。(第二届会议可以 如果使用独占锁,也可以访问 在上,信息被释放,因为 第一个请求超过了锁 超时。)如果启用会话状态 已设置@Page指令中的值 要只读,请求 只读会话信息不可用 导致在上的独占锁 会话数据。但是,它是只读的 对会话数据的请求可能仍然存在 必须等待由 将会话数据读写请求发送到 清楚

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

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

只是一个猜测,但是您是否确保响应从不使用
response.Cache.SetCacheability(HttpCacheability.NoCache)
缓存?如果有人提出请求,我建议使用来调试。