2010-06-30 102 views
1

一些快速細節:ASP.NET會話已過期 - 事件ID 1309

我在IIS6上運行ASP.NET 4.0.30319.0。我一直在託管一個包含ReportViewer的網站,現在已經有一段時間了(大約3年)。在四月份,我升級到4.0運行時,並且事情平穩運行了幾個月。

現在,我突然開始在託管ReportViewer的頁面上看到相當多的會話超時異常。事件查看器記錄了許多這些事件,並且實際上能夠查看頁面時,事件查看器碰撞或錯過。點擊頁面一次,您可以看到生成的報告。刷新,併發生錯誤。再次刷新,它返回...

我已經搜查了很多論壇試圖找出問題 - 大多數似乎建議更改SQL服務器設置(我不使用),更改AsyncRendering =「False」,更改應用程序池設置或超時。我不願意改變其中的任何一種,因爲它僅在一週前運作過,沒有這個問題。

一個Windows更新的短,或者有人進行更改到服務器,而無需我的知識,我的想法......

更新

我試圖增加最大虛擬內存,在應用程序池中,這不起作用。

+0

您使用inProc,狀態服務器還是sql支持的會話? – chris 2010-06-30 16:07:16

+0

單個Web服務器或農場?它僅在生產中發生嗎?粘性會話?你使用緩存嗎? – 2010-06-30 21:24:18

+0

使用inProc,並且該應用程序位於單個Web服務器上。存儲在會話中的所有信息都是用戶的身份驗證狀態 - 不包含大量數據,否則。 – AlishahNovin 2010-06-30 22:11:56

回答

1

升級到.NET 4.0和Report Viewer 2010後,我遇到了幾乎相同的問題。我同時進行了兩次升級,現在我不知道應該責怪誰。在我的情況下,刷新確實有效,但用戶在夜間保持打開頁面,然後在第二天早上點擊刷新,當會話已經丟失時。我們的應用程序池每晚都會回收。

我相信報告查看器應該保持會話存活,但事實並非如此。報表查看器中沒有任何請求。當會話結束時,會話失效或應用程序回收會丟失它的存儲狀態。我也在使用InProc,我試圖改變它,但報告查看器不能與狀態服務器一起使用。稍後我會再試一次,從InProc移開。

查看我的類似question

我還沒有把它投入生產,但我給了aspx頁面的報告一個自定義頁面派生自,我會檢查如果會話實際超時。它基本上重新加載報告頁面,而不是在預期會話的位置進行回發。

if (Context.Session != null) 
     { 
      //Tested and the IsNewSession is more advanced then simply checking if 
      // a cookie is present, it does take into account a session timeout, because 
      // I tested a timeout and it did show as a new session 
      if (Session.IsNewSession) 
      { 
       // If it says it is a new session, but an existing cookie exists, then it must 
       // have timed out (can't use the cookie collection because even on first 
       // request it already contains the cookie (request and response 
       // seem to share the collection) 
       string cookieHeader = Request.Headers["Cookie"]; 
       if ((null != cookieHeader) && (cookieHeader.IndexOf("ASP.NET_SessionId") >= 0)) 
       { 
        Response.Redirect(Request.Url.ToString()); 
       } 
      } 
     }