2012-05-09 4 views
2

.net이 내장 된 웹 사이트에서 하루에 한 번 링크가 한 번 (한 번만) 실행되도록하고 싶습니다. 공유 서버에 있으므로 실행 파일을 실행할 수 없습니다. 예약 된 작업을 만들기 위해 24 시간 동안 스위치가 켜져있는 PC에 액세스 할 필요가 없습니다.하루에 한 번 URL을 방문하십시오.

내 옵션에는 어떤 것이 있습니까?

+0

응용 프로그램 재시작과 관련하여 하루에 한 번 씩만 확인할 수 있습니까? 결과를 저장해야합니까? 응용 프로그램이 다시 시작되면 결과를 디스크에서 다시 읽어 올 필요가 있습니까? –

+0

@MAfifi - essentnally URL을 hiting db.by에 저장 inculding 몇 가지 일을 코드 블록을 실행해야합니다 내가 코드 – raklos

답변

1

캐시 클래스를 사용할 수 있습니다. 새 캐시 항목을 추가 할 때 24 시간 만료되도록 설정하고 만료시 실행할 이벤트 처리기를 전달할 수 있습니다.

이벤트 처리기에서 캐시 항목을 재설정 할 수 있습니다.

Cache.Add 참조 onRemoveCallback에 대한 매개 변수 :

onRemoveCallback - 유형 : System.Web.Caching.CacheItemRemovedCallback 객체가 캐시에서 제거 될 때 제공되는 경우 호출되는 위임. 이 기능을 사용하여 개체가 캐시에서 삭제 될 때 응용 프로그램에 알릴 수 있습니다.

1

크론 작업이 가능합니까?

0 0 * * * curl -q http://www.example.com/page.aspx 
+1

의 블록을 실행할 수 있습니다»그리고 24 시간에 전환되는 PC에 대한 액세스 권한이 예약 된 작업을 생성하십시오. "- 대신 WebCron 서비스를 제안 할 수 있습니다. – Joey

0

당신의 최선의 선택은 단지 하루에 한 번 실행됩니다 보장에 대한 정적 생성자 + 타이머 + 몇 가지 안전 가드가 될 것입니다.

첫 번째 실행을 하루 종일 기다리지 말고 몇 가지 사항을 확인하기 위해이를 향상시킬 수 있습니다. 이전 실행이 23 시간 전이라면 하루 종일 기다리지 마십시오. 몇 가지 수학은 본질적으로 다음 실행이 실행 된 후 24 시간이되도록 보장합니다.

뭔가 같은

private static DateTime _lastNavigated; 
private static Timer _myTimer 

static MyObject() 
{ 
    _myTimer = new Timer(24 * 60 * 60 * 1000); 
    _myTimer.Elapsed += MyOnceADayCode; 
    _myTimer.Enabled = true; 
} 

public static void MyOnceADayCode(object source, ElapsedEventArgs e) 
{ 
    _lastNavigated = DateTime.UtcNow; 
    if (DateTime.UtcNow > _lastNavigated.AddDays(1)) 
    { 
     // Haven't navigated in the last day, need to navigate again 
    } 
} 

또 다른 아이디어는 (귀하의 계정이 액세스 할 수 있는지 여부에 따라), 예약 된 작업을 (코드 사용) 만드는 것입니다. COM을 사용하여 모든 작업을 수행 할 수있는 좋은 래퍼 클래스가 있습니다. 앱로드시 코드가 실행되도록하려면 정적 생성자가 필요합니다.

0

ASP.NET을 사용하여 웹 사이트에서 예약 된 작업을 수행하려면 this article을 읽어보십시오.

관련 문제