ASP.NETWebサービスだけを使用してWindowsサービスをシミュレートするために使用できるトリックがあります。
その要点は次のとおりです。
データベースをポーリングする頻度と同じ有効期限で、アイテムをキャッシュに配置します。
アイテムがキャッシュから削除されたときに発生するコールバックを追加します。コールバックメソッドで、ポーリングコードを追加して、実行したいこと(アクセスデータベースの呼び出し、メールの送信など)を実行します。
だから:あなたのグローバルな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を参照してください。