Webアプリケーション理想的ではありません。は、サイトが常に稼働していることを前提にしています。
サンプルは次のとおりです。global.asaxにキャッシュアイテムを作成していますが、有効期限があります。期限が切れると、イベントが発生します。 OnRemove()イベントのデータなどを取得できます。
次に、Application_BeginRequestのコードをトリガーするページへの呼び出しを設定して、キャッシュ項目を有効期限に戻すように設定できます。
のGlobal.asax:あなたのスケジュールされたタスクが迅速である場合、これは、うまく機能
private const string VendorNotificationCacheKey = "VendorNotification";
private const int IntervalInMinutes = 60; //Expires after X minutes & runs tasks
protected void Application_Start(object sender, EventArgs e)
{
//Set value in cache with expiration time
CacheItemRemovedCallback callback = OnRemove;
Context.Cache.Add(VendorNotificationCacheKey, DateTime.Now, null, DateTime.Now.AddMinutes(IntervalInMinutes), TimeSpan.Zero,
CacheItemPriority.Normal, callback);
}
private void OnRemove(string key, object value, CacheItemRemovedReason reason)
{
SendVendorNotification();
//Need Access to HTTPContext so cache can be re-added, so let's call a page. Application_BeginRequest will re-add the cache.
var siteUrl = ConfigurationManager.AppSettings.Get("SiteUrl");
var client = new WebClient();
client.DownloadData(siteUrl + "default.aspx");
client.Dispose();
}
private void SendVendorNotification()
{
//Do Tasks here
}
protected void Application_BeginRequest(object sender, EventArgs e)
{
//Re-add if it doesn't exist
if (HttpContext.Current.Request.Url.ToString().ToLower().Contains("default.aspx") &&
HttpContext.Current.Cache[VendorNotificationCacheKey] == null)
{
//ReAdd
CacheItemRemovedCallback callback = OnRemove;
Context.Cache.Add(VendorNotificationCacheKey, DateTime.Now, null, DateTime.Now.AddMinutes(IntervalInMinutes), TimeSpan.Zero,
CacheItemPriority.Normal, callback);
}
}
。 長期間実行されているプロセスの場合は、間違いなくあなたのWebアプリケーションからそれを保持する必要があります。
最初のリクエストがアプリケーションを開始している限り、サイトに訪問者がいなくても60分ごとに起動します。
私は、サービスがバックグラウンドタスクを実行し、あなたが望むように実行されることを確認する最も適切な方法だと言います。それを考えると、もしあなたが欠点を抱えていれば、iisプロセスの中で実行中のものにかなり近づくことができます。もっと詳しくここhttp://stackoverflow.com/questions/1607178/background-task-with-an-asp-net-web-applicationそしてここhttp://blog.stackoverflow.com/2008/07/easy-background -tasks-in-aspnet/ – bronsoja
2番目のリンクはまさに私が探していたものです!そのcodeprojectの記事もJeffのオリジナルのブログ投稿も私のGoogle検索結果に現れなかったことには驚きました。神は私がこれを投稿する前にlooooongの時間を検索することを知っている...ありがとう! – guidupuy
これを両方の方法で実行した結果、スケジュールされたタスク用に別のアプリケーションを使用すると、ASP.NETアプリケーション内でスレッドを生成するよりも信頼性が高く簡単になります。 – weir