26

ASP.netは、同じセッションIDを使用するすべての要求をキューに入れているように見えます。3ページあるとしましょう。

Default.aspx

protected void Page_Load(object sender, EventArgs e)
{
    Session["asdf"] = "LOLZ";
}

このページを押すと、セッションが存在しない場合は明らかに新しいセッションが作成されます。

X-AspNet-Version: 2.0.50727
Set-Cookie: ASP.NET_SessionId=ibjphuv0aiafqi453tyze345; path=/; HttpOnly

次に、Hang.aspxを押します

protected void Page_Load(object sender, EventArgs e)
{
    Thread.Sleep(10000);
}

そして、このセッションIDが渡される他のページにアクセスした直後に、それが何かを実行するかどうかは関係ありません。それをTest.aspxと呼びましょう。

ロードのシーケンスはそのようなものです。

Request            Timeline
"GET /"            |*|
"GET /Hang.aspx"       |******************************************|
"GET /Test.aspx"            |**************************************|

私の質問は、この機能を無効にするにはどうすればよいかということだと思います。セッションの状態をより予測できるようにするのが便利だと理解していますが、私の場合、レポートページの読み込みが長時間続くと、ユーザーのマルチタスク機能が失われます。

4

1 に答える 1

23

この動作は仕様によるものです。セッション状態への同時アクセスは許可されていません。同じSessionIDを持つリクエストは、その状態の潜在的な破損を防ぐために排他的にロックされます。

これを回避するには、ページディレクティブでセッション状態を無効にすることができます。

<%@ Page EnableSessionState="false" %>

詳細については、 http://msdn.microsoft.com/en-us/library/ms178581.aspxの「同時要求とセッション状態」を参照してください。

設定EnableSessionState="ReadOnly"すると、そのページがSessionStateの排他ロックを取得できなくなります(ただし、ページ自体は、ユーザーによる他の非読み取り専用要求が終了するのを待ってからロードする必要があります)。

(これは、この質問に対する私の回答のコピーアンドペーストですASP.netサイト:ユーザーのページの読み込みが長いと、ユーザーの他のすべてのページの読み込みが保留になります

于 2010-11-30T22:10:01.640 に答える