2009-08-26 4 views
0

asp.net의 global.as에서 System.Timers.timer를 사용하여 예약 타이머를 설정하십시오. 함수 'transferMoney()를 보겠습니다. 그러나이 타이머는 예상치 못한 몇 시간 후에 중지 될 수 있습니다. 그리고이 때문에 모든 작업이 보류 중입니다. MVC 1.0 asp.net에서 타이머를 설정하는 데 더 좋은 방법이 있는지 알고 싶습니다. 미리 감사드립니다.asp.net에서 더 좋은 타이머는 무엇입니까?

답변

4

응용 프로그램이 재활용 되었기 때문일 수 있습니다. Global.ashx는 장기 실행 작업을 수행하기에 적합한 장소가 아닙니다. AppDomain이 재활용되면 타이머가 사라지기 때문입니다. 나는 직업 Windows 서비스를 만드는 것이 좋습니다.

편집 : Visual Studio에서 [파일]> [추가]> [새 프로젝트 ...]> [Windows]> [Windows 서비스]를 사용하면 Windows 서비스 프로젝트를 만들고 프로젝트의 스텁 코드를 가져옵니다.

완벽한 예가 나오지 않으므로 google it을 제안합니다. ;) 당신이 볼 수있는 수많은 샘플이 있습니다.

This article (CodeProject)은 Windows 서비스에 대한 좋은 소개 인 것으로 보입니다.

+0

어떻게 처리하나요?샘플 코드를 좀 주시겠습니까? – MemoryLeak

+0

그가 다른 프로그램 (예 : Windows 서비스)을 실행한다고 말하면서 문제는 기본적으로 응용 프로그램 (웹 사이트)이 서버 재활용 정책에 따라 너무 자주 종료된다는 문제입니다. 장기 실행 작업을 원하면 Windows 서비스. – meandmycode

2

당신은 결국 "종료"합니다 ASP.NET 응용 프로그램에서 사용할 수 있습니다 모든 타이머를 시도하지만,이 매우 예상되는 동작 process recycling로 인해 수 있습니다.

+0

그래서 어떻게 피할 수 있습니까 ??? 나는 그것을 봤는데, 나는 System.timers.timer가 서버에 사용되는 것을 알고 있지만, 특별한 기능을 가지고 있습니까? – MemoryLeak

1

IIS는 응용 프로그램 풀 설정에 따라 IIS가 작업자 프로세스를 정기적으로 일정을 조정하므로 타이머가 작동하지 않습니다. 따라서 타이머가 재생되면 타이머가 파괴되어 다시 열어야합니다.

타이머 개체가 아직 사용 가능한지 여부를 확인하고 사용할 수없는 경우 만들 수 있습니다. 다른 타이머 개체를 사용하면 효과가 없습니다. 그러나 이것은 여전히 ​​문제가 있습니다. 특정 기간 동안 웹 요청을하지 않으면 여전히 파괴됩니다. 가장 좋은 방법은 웹 사이트를 안전하게 유지할 수있는 다른 장소에서 핑 모니터를 설치하는 것입니다.

1

ASP.NET에서 안정적으로 타이머를 실행할 수 없습니다. 들어오는 요청이 없으면 IIS가 응용 프로그램을 종료 할 수 있으며 다음 요청이 도착할 때까지 IIS가 시작되지 않습니다.

왜 타이머가 필요하다고 생각하십니까? 대부분의 웹 응용 프로그램에서는 외부 소스에 의존하지 않는 한 정기적 인 업데이트를 수행 할 필요가 없습니다.

응용 프로그램 내에서 데이터를 이동하는 경우 실제 트랜잭션을 정확한 간격으로 수행 할 필요가 없지만 발생한 경우 결과 만 계산하면됩니다. 요청이 들어올 때마다 마지막 요청 이후 발생한 트랜잭션 수를 계산하여 현재 상태를 따라 잡습니다.

트랜잭션이 외부 소스를 사용하여 실제로 특정 시간에 실행해야하는 경우 ASP.NET만으로는 트랜잭션을 수행 할 수 없습니다. IIS 외부에서 실행되는 응용 프로그램이 필요합니다 (예 : Windows 스케줄러에서 주기적으로 시작).

관련 문제