Я реализовал решение в своем проекте ASP.NET, чтобы автоматически отправлять некоторые электронные письма на основе времени.Я сделал это с помощью System.Runtime.Cache, в частности CacheItemRemovedCallback.Прежде всего я добавляю задачу в кеш в методе Application_Start:
protected void Application_Start(object sender, EventArgs e)
{
...
AddTask(reportElement.name, totalMinutes);
...
}
, а затем метод AddTask добавляет элемент в кеш:
private void AddTask(string name, int minutes)
{
OnCacheRemove = new CacheItemRemovedCallback(CacheItemRemoved);
HttpRuntime.Cache.Insert(name, minutes, null, DateTime.Now.AddMinutes(minutes), Cache.NoSlidingExpiration,
CacheItemPriority.NotRemovable, OnCacheRemove);
}
Так, когда запись в кешистекает через минуты, указанные в AbsolutionExpiration, он вызывает мой метод CacheItemRemoved.По сути, он запускает отчет, отправляет электронное письмо, а затем повторно добавляет задачу в кэш, поэтому он запускается снова по истечении времени - просто.Вот часть кода, который нас интересует в CacheItemRemoved.
public void CacheItemRemoved(string taskName, object minutes, CacheItemRemovedReason r)
{
...
finally
{
AddTask(taskName, Convert.ToInt32(minutes));
}
...
}
В коде есть обработка исключений, поскольку вы можете видеть, что повторное добавление задачи находится в блоке finally, поэтому следуетвсегда звонят.И все блоки захвата исключений - записывают ошибку в файл, так как я хочу, чтобы задача выполнялась, даже если предыдущая не удалась.
Это прекрасно работает на моем локальном компьютере, но когда на Windows Server2003, это в основном только один раз.Я добавил дополнительную отладку, и, похоже, во второй раз, когда добавляется запись в кэш, она просто не истекает.Я полностью застрял сейчас.Сервер Windows работает под управлением IIS 6.0.Есть ли какие-то настройки для кеша, о которых я не знаю.Кроме того, на сервере срок его действия истекает в совершенно другое время, чем указано в минутах.
Заранее спасибо.