asp.net-mvc - 使用 Session 进行 Asp.net MVC3 长轮询

标签 asp.net-mvc asp.net-mvc-3 session long-polling

我尝试在我的 MVC3 应用程序中实现长轮询。

长轮询使用以下代码可以正常工作:当线程休眠时,我可以毫无问题地重新加载页面。

[AsyncTimeout(30 * 1002)]
public void TestAsync()
{
  AsyncManager.OutstandingOperations.Increment();

  var queued = ThreadPool.QueueUserWorkItem(new WaitCallback(parm =>
  {
    var wait = new AutoResetEvent(false);
    wait.WaitOne(TimeSpan.FromSeconds(30));

    AsyncManager.OutstandingOperations.Decrement();
  }));
}
//--------------------------------------------------------------------------------

public ActionResult TestCompleted()
{
  return Json(null);
}
//--------------------------------------------------------------------------------

但是,如果我在应用程序中使用 session ,例如 ..
this.Session["XXX"] = "Test";

当线程正在运行时,我无法重新加载页面。页面等待直到线程准备好,然后页面将刷新。

我怎么解决这个问题?

最佳答案

这不是您问题的解决方案,但可能会有所帮助。

在 MVC 中,您不能为单个用户 session 同时执行多个请求。获得真正异步请求的唯一方法是使 Controller 成为 SessionLess Controller ,但是当然您无法读取或写入 session 。

我在执行异步 AJAX 请求时遇到了这个问题。我想通过设置 SessionStateBehaviourReadOnly我至少可以对 session 进行只读访问,因为不会有并发问题,但这也不起作用。

这篇文章有更多信息http://weblogs.asp.net/imranbaloch/archive/2011/05/10/asynccontroller-v-s-sessionless-controller.aspx

关于asp.net-mvc - 使用 Session 进行 Asp.net MVC3 长轮询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11795540/

相关文章:

c# - 带有 Active Directory 用户的自动完成文本框

c# - 安全异常

c# - Controller 在 mvc 4 中不工作

c# - 找到 MVC Web App 启动路径的简单方法?

session - 如何在 Symfony 中使用 AutoExpireFlashBag?

c# - MVC 助手扩展问题

asp.net - MVC 应用程序构建速度极慢

asp.net-mvc-3 - 这段代码有什么意义?

Symfony 在错误文件中获取用户登录

java - 如何维护用户登录 session ?