4

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";

スレッドの実行中にページをリロードできません。ページは、スレッドの準備が整うまで待機し、その後ページが更新されます。

どうすればこの問題を解決できますか?

4

1 に答える 1

1

これは問題の解決策ではありませんが、役立つ場合があります。

MVC では、1 つのユーザー セッションに対して複数の要求を同時に実行することはできません。真の非同期リクエストを取得する唯一の方法は、コントローラーをSessionLessコントローラーにすることですが、もちろん、セッションに対して読み取りや書き込みを行うことはできません。

非同期 AJAX リクエストを実行したいときに、この問題が発生しました。をに設定するSessionStateBehaviourことReadOnlyで、同時実行性の問題がないため、少なくともセッションへの読み取り専用アクセスを取得できると考えましたが、それも機能しませんでした。

この記事には詳細情報があります http://weblogs.asp.net/imranbaloch/archive/2011/05/10/asynccontroller-vs-sessionless-controller.aspx

于 2012-08-03T19:55:48.567 に答える