Как выполнять различные задачи (например, оповещение по электронной почте/отправку новостного письма) на настроенное время расписания на общем сервере хостинга?Запланированные задания на веб-сайте ASP.NET без покупки выделенных серверов
3
A
ответ
10
Вот файл Global.ascx.cs я использовал, чтобы делать такого рода вещи в прошлом, используя кэш истечения срока действия для запуска задачи по расписанию:
public class Global : HttpApplication
{
private const string CACHE_ENTRY_KEY = "ServiceMimicCacheEntry";
private const string CACHE_KEY = "ServiceMimicCache";
private void Application_Start(object sender, EventArgs e)
{
Application[CACHE_KEY] = HttpContext.Current.Cache;
RegisterCacheEntry();
}
private void RegisterCacheEntry()
{
Cache cache = (Cache)Application[CACHE_KEY];
if (cache[CACHE_ENTRY_KEY] != null) return;
cache.Add(CACHE_ENTRY_KEY, CACHE_ENTRY_KEY, null,
DateTime.MaxValue, TimeSpan.FromSeconds(120), CacheItemPriority.Normal,
new CacheItemRemovedCallback(CacheItemRemoved));
}
private void SpawnServiceActions()
{
ThreadStart threadStart = new ThreadStart(DoServiceActions);
Thread thread = new Thread(threadStart);
thread.Start();
}
private void DoServiceActions()
{
// do your scheduled stuff
}
private void CacheItemRemoved(string key, object value, CacheItemRemovedReason reason)
{
SpawnServiceActions();
RegisterCacheEntry();
}
}
На данный момент, это выстреливает ваш действия каждые 2 минуты, но это настраивается в коде.
0
Somone здесь сделал это, создавая темы в global.asax. Похоже, что они добились успеха. Я никогда не тестировал этот подход сам.
Это, на мой взгляд, было бы лучшим вариантом, чем перегрузка механизма истечения срока действия кеша.
0
Вы можете использовать ATrigger сервис планирования на без проблем. A .Net library также доступен для создания запланированных задач без накладных расходов.
Отказ от ответственности: Я был среди команды Атриггера. Это бесплатная программа, и у меня нет коммерческой цели.
+1 очень приятно, делали такие вещи с началом сеанса и обычными загрузками страниц, прежде чем это кажется намного более подходящим. Вы всегда находили его надежным? –
Вопрос: Что произойдет, если приложение заполнит кеш (сервер работает с низким объемом памяти), в результате чего ASP.NET преждевременно очистит некоторые из элементов Normal priority - я думаю, что это приведет к тому, что DoServiceActions будет выполняться чаще, чем ожидалось. Любые идеи о том, насколько вероятно это/работает вокруг? – David
Я не сталкивался с этой проблемой, но это звучит как правдоподобный сценарий. Я предполагаю, что проверка того, как недавно был вызван метод с использованием секундомера, может быть обходным путем? –