[전환] ASP.NET 알림 기능

3691 단어 asp.net
Windows의 계획 작업은 모두 잘 알고 있어야 하지만 웹에서 어떻게 비슷한 기능을 실현할 수 있습니까?Windows Service를 호출하는 것은 현실적이지 않습니다. 왜냐하면 우리는 서버 자체의 환경을 설정할 수 없기 때문입니다.
그렇다면 웹과 같은 무상태 환경에서 어떻게 같은 기능을 모의할 것인가를 생각해 보자.우선 우리는 우리가 필요로 하는 효과를 촉발할 수 있는 사건이 필요하다.그러면 다음과 같은 몇 가지 시나리오를 선택할 수 있습니다.
1、한 페이지가 요청되었을 때
2. 애플리케이션의 시작과 끝
3. 하나의 세션의 시작, 끝 또는 시간 초과
4. 캐시 만료
3종은 기본적으로 사용할 수 없고 구체적인 원인은 설명이 많지 않기 때문에 4종만 사용할 수 있다.사실 주요 원리는 Cache류의 방법을 이용하는 거예요.


public void Insert ( System.String key , System.Object value , 
                     System.Web.Caching.CacheDependency dependencies , 
                     System.DateTime absoluteExpiration , 
                     System.TimeSpan slidingExpiration , 
                     System.Web.Caching.CacheItemPriority priority , 
                     System.Web.Caching.CacheItemRemovedCallback onRemoveCallback ) 

마지막 매개 변수입니다. 그는delegate입니다.
다음은 구체적인 실현이다.
먼저 응용 프로그램이 시작될 때 응용 프로그램에 아날로그 Cache를 주입해야 합니다.


private const string DummyCacheItemKey = "GagaGuguGigi"; 

protected void Application_Start(Object sender, EventArgs e) 
{ 
    RegisterCacheEntry(); 
} 
  
private bool RegisterCacheEntry() 
{  
    if( null != HttpContext.Current.Cache[ DummyCacheItemKey ] ) return false; 
  
    HttpContext.Current.Cache.Add( DummyCacheItemKey, "Test", null,  
        DateTime.MaxValue, TimeSpan.FromMinutes(1),  
        CacheItemPriority.Normal, 
        new CacheItemRemovedCallback( CacheItemRemovedCallback ) ); 
  
    return true; 
} 


여기서 주의해야 할 것은 기한이 2분 이상으로만 설정될 수 있다는 것이다.만약 당신이 입력한 시간이 2분보다 적다면, 여전히 2분으로 계산됩니다.(.NET 자체 문제일 수 있음)
이렇게 하면 CacheItem Removed Callback 이벤트가 트리거됩니다. CacheItem Removed Callback 이벤트의 원형은 다음과 같습니다.



public void CacheItemRemovedCallback( string key,  
            object value, CacheItemRemovedReason reason) 
{ 

} 

이 중에서 우리는 우리가 해야 할 일의 코드를 추가할 수 있다.
------------------------------------분할--------------------------------
잠깐만, 이게 끝이라고 생각하지 마. 이건 네가 처음으로 이 사건을 촉발한 거야.이 사건이 끝난 후, Cache는 기한이 지난 것으로 인정되었다. 왜냐하면 우리는 새로운 Cache를 다시 넣을 방법을 생각해야 하기 때문이다.
우리의 방법은 페이지 요청을 시뮬레이션한 다음 이 요청에 Cache를 추가하는 것입니다.
위의 Callback 이벤트에 추가


 
public void CacheItemRemovedCallback( string key, 
            object value, CacheItemRemovedReason reason)
{
    Debug.WriteLine("Cache item callback: " + DateTime.Now.ToString() );
    HitPage();

    // Do the service works
    DoWork();
}


DoWork () 는 당신이 해야 할 일을 표시합니다.
HitPage는 다음과 같이 정의합니다.

 
private const string DummyPageUrl = 
    http://localhost/Reminder/WebForm1.aspx;

private void HitPage()
{
    WebClient client = new WebClient();
    client.DownloadData(DummyPageUrl);
}

아날로그 페이지가 실행될 때 Application을 통해BeginRequest 이 이벤트는 Cache를 추가합니다.

protected void Application_BeginRequest(Object sender, EventArgs e)
{
    // If the dummy page is hit, then it means we want to add another item
    // in cache
    if( HttpContext.Current.Request.Url.ToString() == DummyPageUrl )
    {
       // Add the item in cache and when succesful, do the work.
       RegisterCacheEntry();
    }
}

다음으로 이동:http://archive.cnblogs.com/a/280299/

좋은 웹페이지 즐겨찾기