Запланированные работы на сайте ASP.NET без покупки выделенных серверов - PullRequest
3 голосов
/ 09 апреля 2009

Как я могу выполнять различные задачи (например, оповещение по электронной почте / отправка новостного письма) в установленное время на сервере общего хостинга?

Ответы [ 3 ]

10 голосов
/ 09 апреля 2009

Вот файл 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 голосов
/ 26 августа 2013

Вы можете использовать ATrigger сервис планирования на общем хостинге без проблем . Библиотека .Net также доступна для создания запланированных задач без дополнительных затрат.

Отказ от ответственности: я был в команде ATrigger. Это бесплатная программа, и у меня нет коммерческих целей.

0 голосов
/ 09 апреля 2009

Кто-то здесь делал это, создавая потоки в global.asax. Похоже, они имели успех с этим. Я никогда не проверял этот подход сам.

По моему мнению, это был бы лучший вариант, чем перегрузка механизма истечения срока действия кэша.

...