2013-03-30 102 views
0

我有一個ASP.NET很奇怪的問題在Windows 2012 4.5會話asp.net 4.5會話丟失,回來後秒

說明: 會議做工精細。我瀏覽網站,登錄,訪問使用會話的配置文件和其他aspx頁面。然後從一秒到另一秒,在任何aspx頁面上,會話都會丟失,在每個aspx頁面上。幾秒鐘後,會議又回來了。所以如果我在問題出現之前登錄了,我就失去了會話值,幾秒鐘後他們又回來了。 每個瀏覽器都會發生這種情況(IE,FF,Chrome)。 我還沒有嘗試用戶InProc,狀態服務器,Appfabric,但都是一樣的,所以必須做一些與.net會話處理的「頂級」或與IIS,無論... 不確定,但主要是,主觀上我認爲在會議「失落」之前,請求非常緩慢。瘋狂,他們在......之後「回來」,所以他們並沒有真正迷失。

有什麼想法?

UPDATE

我加了一些調試運行代碼。看看登錄,它最容易重現。這裏的隱藏代碼:

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 

所以...運行一切正常,inital負荷,打印出 「步驟A」。 然後登錄後Step0到5或6

然後,由於任何原因,會話是「丟失」,上面的代碼不打印出0到6步看起來像點擊事件不開火。 那麼......但是,然後,重新啓動AppFabric Cache,哦,不知道...它工作 正如我以前寫的...與State Server相同,然後重新啓動StateServer解決問題和Inproc,重新啓動IIS或應用程序的決心它......

只是要清楚。此會話丟失或所有aspx頁面上出現問題,而不僅僅是登錄。到處使用會議至少

+0

你有任何HTML META標籤?一些元標籤可能會混淆你的會話。有關ASP.NET會話的更多信息,請訪問:http://msdn.microsoft.com/en-us/library/ms178581%28v=VS.85%29.aspx – 2013-03-30 19:42:24

+0

是的,我有 < meta name =「Googlebot」content =「all」/>

+0

這些標籤都不會搞亂你的會話。 – 2013-03-30 21:01:10

回答

1

經過大量的閱讀,新的文物監測等我發現真正的問題和工作的解決方案。 該問題與事實有關,即asp.net,直到4.5在某些情況下阻止會話(例如,如果你有iframes,updatepanel等),直到頁面被完全加載。如果用戶在我身邊的另一個頁面上,並且會話被阻止,則涉及到所描述的結果,等待時間爲x秒等。

該解決方案對我有效,性能提高了x倍,但解決了阻止問題:

我使用Couchbase(www.couchbase.com)現金和會話「存儲」,有了這個出色的會議和高速緩存提供商couchbase: https://github.com/evereq/couchbase-aspnet

這裏很重要,關係到阻塞probem是config部分:會話提供者的exclusiveAccess =「false」

我遇到的2個問題,與Win 8 Dev PC和Win 2012服務器有關。 在Win 2012上,我們需要替換一個dll,如下所述:

對於任何感興趣的人來說,這是一個用於libtcmalloc的'wrapper'的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/

正如我所說的,在此之後,阻斷了問題和更好的性能

+0

解決方案使用於 http://lololo.com.br –