2010-06-30 3 views
1

일부 빠른 세부 정보 :ASP.NET 세션이 만료되었습니다. - 이벤트 ID 1309

IIS6에서 ASP.NET 4.0.30319.0을 실행 중입니다. 저는 꽤 오랫동안 (~ 3 년) ReportViewer가 포함 된 웹 사이트를 호스팅했습니다. 4 월에는 4.0 런타임으로 업그레이드되었으며 몇 달 동안 원활하게 실행되었습니다.

이제 ReportViewer를 호스팅하는 페이지에서 예외적으로 세션 시간 초과가 발생했습니다. 이벤트 뷰어에는 이러한 많은 이벤트가 기록되며 실제로 페이지를 볼 수있게되면 오히려 실패합니다. 페이지를 한번 치면 생성 된 보고서를 볼 수 있습니다. 새로 고침을 클릭하면 오류가 발생합니다. 다시 새로 고침하면 반환됩니다 ...

대부분 문제를 파악하려고 노력했습니다. 대부분 SQL Server 설정 변경 (AsyncRendering = "False"변경)을 권장하는 것으로 보입니다. 응용 프로그램 풀 설정 또는 제한 시간 변경 나는이 문제없이 일주일 전에 일 했으므로 이러한 것들을 바꾸기를 꺼립니다. 윈도우 업데이트

짧은이, 또는 누군가가 내 지식없이 서버에 변경을, 나는 가상 최대 증가 해봤

업데이트 ... 아이디어 나갈거야 메모리가 응용 프로그램 풀에서 작동하지 않습니다.

+0

inProc, 상태 서버 또는 sql 지원 세션을 사용하고 있습니까? – chris

+0

단일 웹 서버 또는 팜? 프로덕션에서만 발생합니까? 끈적 세션? 캐싱을 사용합니까? –

+0

inProc을 사용하면 앱이 단일 웹 서버에 있습니다. 세션에 저장되는 것은 모두 사용자의 인증 상태입니다. 그렇지 않으면 큰 데이터 집합이 아닙니다. – AlishahNovin

답변

1

.NET 4.0 및 Report Viewer 2010으로 업그레이드 한 후 거의 동일한 문제가 발생했습니다. 동시에 두 업그레이드를 수행했는데, 이제 누가 책임이 있는지 확신 할 수 없습니다. 내 경우에는 새로 고침이 작동하지만 사용자가 밤에 페이지를 열어 둔 상태로 유지 한 다음 다음날 아침 세션이 이미 손실되었을 때 새로 고침을 클릭합니다. 매일 밤 앱 풀이 재활용됩니다.

보고서 뷰어는 세션을 활성 상태로 유지해야한다고 생각하지만 실제로는 그렇지 않습니다. 보고서 뷰어에는 어떤 종류의 요청도 없습니다. 그런 다음 세션이 만료되면 세션 만료 또는 앱 재활용을 통해 저장된 상태가 손실됩니다. 또한 InProc을 사용하고 있는데 변경하려고했지만 보고서 뷰어가 State Server에서 작동하지 않았습니다. 나는 나중에 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()); 
       } 
      } 
     } 
관련 문제