アイデアは、アプリケーションの起動時にオブジェクトをキャッシュに配置し、「デッド」になったときに手順を再度繰り返すことです。 global.asax Simplifiedで実行すると、コードは次のようになります。
protected void Application_Start(object sender, EventArgs e)
{
HttpContext.Current.Cache.Add("ServiceCacheKey", "Dummy", null, DateTime.MaxValue, TimeSpan.FromMinutes(1), CacheItemPriority.Normal, new CacheItemRemovedCallback(CacheItemRemovedCallback));
}
これで、CacheItemRemovedCallbak自体で、必要な「サービス」アクションを実行し、オブジェクトをキャッシュに配置するプロセスを開始できます。 現時点ではHttpContextは利用できないため、ページを呼び出し、このページを呼び出すときにオブジェクトをキャッシュに入れます。
public void CacheItemRemovedCallback(string key, object value, CacheItemRemovedReason reason)
{
//do service work
WebClient wc = new WebClient();
wc.DownloadData(SecretPageURL);
}
protected void Application_BeginRequest(object sender, EventArgs e)
{
if ((HttpContext.Current.Request.Url.OriginalString == SiteSettings.ServiceCacheKeyURL) && (HttpContext.Current.Request.IsLocal == true))
{
HttpContext.Current.Cache.Add("ServiceCacheKey", "Dummy", null, DateTime.MaxValue, TimeSpan.FromMinutes(1), CacheItemPriority.Normal, new CacheItemRemovedCallback(CacheItemRemovedCallback));
}
}
以上です。 わずらわしいのは、正しいページが呼び出されたかどうか、および「サービス」オブジェクトをキャッシュに入れるかどうかを確認するためにすべてのリクエストがチェックされることです。これがパフォーマンスにどのように影響するかわかりません。