0

Windows 2012 の ASP.NET 4.5 セッションで奇妙な問題が発生しました

説明: セッションは正常に動作します。私はサイト、ログイン、アクセス、たとえばプロファイル、およびセッションを使用する他のaspxページを通過します。次に、任意の aspx ページで 1 秒ごとに、すべての aspx ページでセッションが失われます。数秒後、セッションが再開されます。したがって、問題が発生する前にログインすると、セッション値が失われ、数秒後に元に戻ります。これは、すべてのブラウザ (IE、FF、Chrome) で発生します。私はまだInProc、State Server、Appfabricを使用しようとしましたが、すべて同じなので、「トップレベル」の.netセッション処理またはIISで何かを行う必要があります...よくわかりませんが、ほとんど、主観的には、セッションが「失われる」直前にリクエストが非常に遅いと思います。クレイジーなことに、彼らは後に「戻ってくる」ので、実際には迷子にはなりません。

何か案が ?

アップデート

デバッグコードを追加しました。最も再現しやすいログインを見てください。ここにコードビハインド:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    Response.Write("StepA/")
End Sub



Protected Sub btnSignin(ByVal sender As Object, ByVal e As EventArgs)

    Response.Write("Step0/")
    If System.Web.Security.Membership.ValidateUser(loginEmail.Value, loginPassword.Value) = True Then

        Response.Write("Step1/")

        FormsAuthentication.SetAuthCookie(loginEmail.Value, False)
        Response.Write("Step2/")

        Dim ui As New UserInfo
        Response.Write("Step3/")
        ui.InitUserInfo(loginEmail.Value)
        Response.Write("Step4/")

        If Request.UrlReferrer.OriginalString.Contains("Login.aspx") = True Then
            Response.Write("Step5/")
            Response.Redirect("/admin/Default.aspx")
        Else
            Response.Write("Step6/")
            Response.Redirect(Request.UrlReferrer.OriginalString)

        End If


    Else
        Response.Write("Step7/")
        loginfailed.Visible = True
    End If

End Sub

そう...すべての通常の初期ロードを実行し、「stepA」を出力します。次にログイン後 Step0~5 or 6

次に、何らかの理由でセッションが「失われ」、上記のコードはステップ 0 から 6 を出力しません。クリック イベントが発生しないように見えます。さて...しかし、AppFabricキャッシュを再起動すると、不思議です...前に書いたように機能します...状態サーバーでも同じことが起こり、StateServerを再起動すると問題が解決し、Inproc、IISまたはアプリを再起動すると問題が解決します。 ...

ただ明確にします。このセッションが失われたか、ログインだけでなく、すべての aspx ページで問題が発生しました。少なくともセッションが使用されるすべての場所

4

1 に答える 1

1

多くの読書、新しい遺物の監視などの後、私は本当の問題と実用的な解決策を見つけました。この問題は、ページが完全に読み込まれるまで、4.5までのasp.netがいくつかのシナリオ(iframe、updatepanelなどがある場合)でセッションをブロックするという事実に関連しています。ユーザーが私の側の別のページに移動し、セッションがブロックされた場合、説明されている結果、x 秒の待機時間などになります。

私にとってはうまくいく解決策は、パフォーマンスが x 倍向上しますが、ブロッキングの問題は解決されます。

Couchbase (www.couchbase.com) をキャッシュとセッションの「ストア」として使用し、Couchbase 用のこの優れたセッションとキャッシュ プロバイダーを使用します: https://github.com/evereq/couchbase-aspnet

ここで重要なのは、ブロッキングの問題に関連する設定部分です: セッション プロバイダーの ExclusiveAccess="false"

Win 8 Dev PCとWin 2012サーバーに関連する2つの問題。Win 2012 では、次のように dll を置き換える必要があります。

興味のある方は、これは libtcmalloc の「ラッパー」の x64 バージョンです。それをcouchbaseの「bin」ディレクトリに置き、couchbaseサービスを再起動するだけです。

dll の x64 バージョン http://www.mediafire.com/?xc8nurnxjqr8klb

PS: ヒントをくれた Chris Wundram に感謝します!

Win 8 では、このブログ投稿で何をすべきかがよく説明されています。

http://blogs.southworks.net/mkrikorian/2013/02/06/installing-couchbase-under-windows-8/

私が言ったように、この後、ブロッキングの問題がなくなり、パフォーマンスが大幅に向上しました

于 2013-04-06T12:53:49.780 に答える