2017-12-26 3 views
0

SQLiteSessionStateStoreProvider.DeleteExpiredSessions()는 IIS 7에서 자동으로 실행되지 않습니다. 세션 상태 저장을위한 데이터베이스가 inProc에 있었다면 런타임시 자동으로 관리되고 실제 SQL 데이터베이스에 있던 경우 SQL 에이전트가 실행 취소 할 간격으로 실행하는 스크립트가 있음을 이해합니다. 만료 된 세션. 그러나 여기에 제공된 라이브러리에 정의 된 함수가 있음에도 불구하고 : https://github.com/micahlmartin/SQLiteSessionStateStore (DeleteExpiredSessions()로 이름이 바뀌고 공개 됨) IIS 서버에서이 함수를 호출하는 방법이 확실하지 않거나 예약 된 함수를 구현해야하는 경우 백엔드에서 내 자신의 IIS 서버에서 세션 상태는 20 분 간격 만료시 사용자 지정으로 설정됩니다. 서버의 web.config와 동일한 설정으로 쿠키 모드로 설정됩니다. 데이터베이스는 현재 세션 상태에 대해 지난 7 일간의 데이터를 보유하고 있으며 백엔드에서이 데이터베이스와 상호 작용할 방법이 확실하지 않거나 일부 서비스 또는 구현이 누락 된 경우이를 알고 있습니다. C# MVC를 통해 SQLite를 통해 사용자 정의 SessionStateProvider를 실행 한 경험이있는 사람이라면이 문제를 해결하는 방법을 알아야합니다. 감사합니다. 당신의 Global.asax에서이 같은ASP.NET 사용자 지정 SQLite DeleteExpiredSessions()

답변

0

시도 뭔가 :

은 약 10 분 DeleteExpiredSessions()를 실행합니다. 잠시 동안 0.25 초마다 검사하여 응용 프로그램이 종료되는지 확인합니다. 꺼지면 멈 춥니 다.

public class Global : System.Web.HttpApplication 
{ 
    public static Task SessionCleanup { get; private set; } = null; 
    public static bool ApplicationEnding { get; private set; } 

    public static void PeriodicallyRunSesssionCleanup() 
    { 
     int cleanupInterval = 600000;//10 minutes 
     int sleepInterval = 250;// 1/4 second 
     while(!ApplicationEnding && cleanupInterval > 0) 
     { 
      Thread.Sleep(sleepInterval); 
      cleanupInterval -= sleepInterval; 
     } 
     if(!ApplicationEnding) 
     { 
      throw new NotImplementedException("Place your code that cleans up sessions here to have it run every 10 minutes."); 
      SessionCleanup = new Task(PeriodicallyRunSesssionCleanup); 
      SessionCleanup.Start(); 
     } 
    } 

    protected void Application_Start(object sender, EventArgs e) 
    { 
     SessionCleanup = new Task(PeriodicallyRunSesssionCleanup); 
     SessionCleanup.Start(); 
    } 

    protected void Application_End(object sender, EventArgs e) 
    { 
     ApplicationEnding = true; 
     if (SessionCleanup != null) SessionCleanup.Wait(); 
    } 
} 
+0

"DeleteExpiredSessions()"이름이 현재 컨텍스트에 없습니다. – tincopper2

+0

이것은 데이터베이스에서 정리 절차를 호출하는 https://github.com/micahlmartin/SQLiteSessionStateStore (DeleteExpiredSessions()로 이름을 바꾸고 public으로 변경)에서 언급 한 방법입니다. msdn에서도 세션 정리 절차의 온라인 예제가 몇 가지 있습니다. 하나를 만드는 데 도움이 필요하거나 다른 질문에서 더 잘 처리되는 데이터 계층을 구현하는 데 도움이 필요한 경우 관련 질문이있는 경우 알려 주시면 도와 드리겠습니다. –

+0

데이터베이스를 정리하는 메소드를 호출하지 않습니다. 이것은 공급자의 인스턴스를 참조하지 않고 정적 라이브러리 만 참조합니다. – tincopper2