2011-08-05 9 views
0

웹 페이지를 만들기 위해 Asp .NET Mvc 3을 사용하고 매 20 분마다 데이터베이스에서 무언가를 변경해야합니다 ... My Global.asax.cs 파일에 Timer를 설정했습니다. 여기 불쌍, 그것은 한 번만 작동하는 무슨 코드C# Timer가 올바르게 작동하지 않습니다.

protected void Application_Start() 
{ 
    AreaRegistration.RegisterAllAreas(); 

    RegisterGlobalFilters(GlobalFilters.Filters); 
    RegisterRoutes(RouteTable.Routes); 
    Unit = new UnitOfWork(); 
    System.Timers.Timer timer = new System.Timers.Timer(); 
    timer.Interval = 1200000; //20 minutes 
    timer.Elapsed += new System.Timers.ElapsedEventHandler(Elapsed); 
    timer.Start(); 
} 

void Elapsed(object sender, System.Timers.ElapsedEventArgs e) 
{ 
    Unit.Srvc.UpdateUserActivity(); 
} 

지금은 그것을 실행 오늘이나입니다 ... 20 분 후는 데이터베이스를 변경하고 모든입니다.

P.S.Yeadays 나는 20 초 후에 그것을 테스트하고 정상적으로 작동합니다. 그러나, 오늘 그것은 20 분 간격으로 올바르게 작동하고 싶지 않습니다. 도와 줘서 고마워.

P.S.2 데이터베이스 업데이트를 위해 저장 프로 시저를 사용했습니다.

PS3 그냥 무작위로 작동한다는 것을 감지했습니다. D : 5 : 32Am에서 프로그램을 실행합니다. 5 : 52Am에서 작동하고 6 : 12Am에서 작동하지 않으며 현재 작동합니다 (현재 6 : 49 Am, 나는 언제 작동하는지 모른다.)

답변

4

대부분의 경우 응용 프로그램이 실행되지 않아 비활성 상태로 인해 AppDomain이 종료됩니다. 유휴 타임 아웃은 20 분 동안 작동하지 않는다고 생각합니다. 당신은 (는 IIS AppPool을에서) 스레드가 재활용되거나 종료되고 있음을 발견 할 수

How to keep ASP.NET assemblies in AppDomain alive?

+0

... 그리고 응용 프로그램이 ;-) –

+2

+1 액티브 - 이것은 가능성이 문제가 동의했다. 그러나 나는 당신이 정말로이 노력에 동참하고 응용 프로그램과 서버의 성능과 안정성을 돕기 위해 존재하는 IIS의 정상적인 동작을 파괴하길 원한다고 생각할 것입니다. – Reddog

0

:

이 질문을 참조하십시오.

웹 응용 프로그램은 일반적으로 이러한 유형의 동작 대신 요청 - 응답 처리에 사용할 때 가장 잘 작동합니다. SQL Server를 사용한다고 가정하면 데이터를 비정규 화 (즉, 계산 된 데이터 롤업)하는 경우 유지 관리 작업이나 트리거를 볼 수 있습니다. 요청 - 응답 프로세스 중에 수집 된 데이터가 포함 된 경우 지연된 지속성에 대해 웹 캐시 및 일부 캐시 만료 작업을 사용할 수 있습니다.

0

내 생각에 세션이 만료 되기는하지만 조금 더 추가하고 싶습니다.

코드 읽기 나는 사용자가 데이터베이스에 '활성화되지 않았 음'또는 연결이 끊긴 것으로 표시되어 있다고 생각합니다. 그렇다면 타이머를 사용하여 대신 set the session expiration (사용자가 특정 기간 동안 요청을 보내지 않은 경우)을 필요한 기간까지 실행하고 실행할 코드를 입력하십시오. the Session_OnEnd handler

1

Application_Start에서 범위를 벗어나면 참조가 유지되지 않으므로 가비지 컬렉션에 의해 타이머가 죽는 것처럼 보입니다. 추가하십시오 :

난 그냥 로컬 호스트에서 테스트 한
Application["Whatever"] = timer; 
관련 문제