我尝试在我的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);
}
//--------------------------------------------------------------------------------
但如果我在应用程序中使用Sessions,比如..
this.Session["XXX"] = "Test";
线程运行时我无法重新加载页面。 Page等待单元线程准备就绪,然后页面将刷新。
我该如何解决这个问题?
答案 0 :(得分:1)
这不是解决问题的方法,但可能有所帮助。
在MVC中,您无法同时为单个用户会话执行多个请求。获取真正异步请求的唯一方法是使控制器成为SessionLess
控制器,但当然您无法读取或写入会话。
我想在做异步AJAX请求时遇到这个问题。我想通过将SessionStateBehaviour
设置为ReadOnly
我至少可以获得对会话的只读访问权限,因为不会出现并发问题,但这也不起作用。