我們有一個運行在ASP.NET上的網站。我想運行一項服務,每隔XX小時檢查一次數據庫表,如果沒有滿足某些條件,請執行操作(發送郵件)。輪詢非專用Windows服務器內的訪問數據庫
爲託管服務器不是一個專用的服務器,我們不能用
- Windows服務。 (我們只有控制面板)
- 用於發送郵件的SQL服務,因爲我們使用的是Access 2003(mdb)作爲我們的數據庫。它駐留在程序App_Data
- IIS也不可用
它很重要的是我們需要在服務器某種輪詢。
我們現在有點卡住了。我們有什麼替代方案?
我們有一個運行在ASP.NET上的網站。我想運行一項服務,每隔XX小時檢查一次數據庫表,如果沒有滿足某些條件,請執行操作(發送郵件)。輪詢非專用Windows服務器內的訪問數據庫
爲託管服務器不是一個專用的服務器,我們不能用
它很重要的是我們需要在服務器某種輪詢。
我們現在有點卡住了。我們有什麼替代方案?
它這裏提到
Easy Background Tasks in ASP.NET
這裏有從該鏈接
private static CacheItemRemovedCallback OnCacheRemove = null;
protected void Application_Start(object sender, EventArgs e)
{
AddTask("DoStuff", 60);
}
private void AddTask(string name, int seconds)
{
OnCacheRemove = new CacheItemRemovedCallback(CacheItemRemoved);
HttpRuntime.Cache.Insert(name, seconds, null,
DateTime.Now.AddSeconds(seconds), Cache.NoSlidingExpiration,
CacheItemPriority.NotRemovable, OnCacheRemove);
}
public void CacheItemRemoved(string k, object v, CacheItemRemovedReason r)
{
// do stuff here if it matches our taskname, like WebRequest
// re-add our task so it recurs
AddTask(k, Convert.ToInt32(v));
}
作品以及一些片段我的測試;徽章每60秒頒發一次,就像所有用戶的發條一樣 - Jeff Atwood
有一個技巧可以用來模擬一個windows服務只使用你的ASP.NET web服務。
它的要點去如下:
廣場項目與到期期限等於你想多久輪詢數據庫緩存。
添加從緩存中刪除項目時觸發的回調。在回調方法,添加您的投票代碼,做你想要做的事(呼叫接入數據庫,發送郵件等)
這樣:在全局ASAX,這樣的事情:
private const string DummyCacheItemKey = "pollingCacheKey";
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;
}
public void CacheItemRemovedCallback(string key,
object value, CacheItemRemovedReason reason)
{
Debug.WriteLine("Cache item callback: " + DateTime.Now.ToString());
// Do the service works
DoWork();
ReregisterCacheItem();
}
雖然它不理想,但它適合您的限制。
該技術的全部細節可以在這裏找到:http://www.codeproject.com/Articles/12117/Simulate-a-Windows-Service-using-ASP-NET-to-run-sc
感謝這個美好的回答。我更喜歡atwood,因爲它更流行 – naveen