【问题标题】:Asp.net MVC3 long polling with Session带有会话的 Asp.net MVC3 长轮询
【发布时间】:2012-08-01 11:47:42
【问题描述】:

我尝试在我的 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);
}
//--------------------------------------------------------------------------------

但如果我在应用程序中使用会话,例如 ..

this.Session["XXX"] = "Test";

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

我该如何解决这个问题?

【问题讨论】:

  • 如果你这样做是因为你想了解长轮询..太棒了..如果不是..使用 SignalR..这是一个不需要重新发明轮子的领域是现有的良好支持的解决方案。哦,如果您正在学习长轮询,您可能应该花一些时间在 SignalR 源代码中。

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


【解决方案1】:

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

在 MVC 中,您不能为单个用户会话同时执行多个请求。获得真正异步请求的唯一方法是让控制器成为SessionLess 控制器,但是当然你不能读取或写入会话。

我在执行异步 AJAX 请求时遇到了这个问题。我认为通过将SessionStateBehaviour 设置为ReadOnly,我至少可以获得对会话的只读访问权限,因为不会出现并发问题,但这也不起作用。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-20
    • 2015-10-19
    • 1970-01-01
    相关资源
    最近更新 更多