Есть ли что-то вроде работы cron в IIS?

Я разрабатываю веб-приложение ASP.NET. Есть несколько функций, которые нужно запускать каждые 10 минут. Поэтому в настоящее время я рассматриваю "запланированную задачу" или создаю службу Windows для вызова URL-адреса.

Но я помню, как однажды я сделал то же самое в пространстве веб-хостинга PHP, используя задание cron.

Итак, есть что-то вроде работы cron в IIS?

Примечание. Я не ожидаю использовать сторонние службы онлайн-планировщика.

+7
03 апр. '14 в 2:25
источник поделиться
3 ответа

Яблоки и апельсины. cron - это служба Unix. IIS - это веб-сервер. Так же, как cron не включен в Apache или nginx, нет смысла, в котором IIS содержит планировщик. Однако вы можете использовать schtasks.exe таким же образом, что вы можете использовать cron в Unix.

Вы можете найти больше идей в этом вопросе.

+4
03 апр. '14 в 2:30
источник

Я согласен с @Amadan - яблоками и апельсинами.

Однако для этой цели я бы предпочел писать пользовательскую службу Windows, а не использовать планировщик задач Windows. Другой вопрос SO говорит о преимуществах и недостатках каждого варианта.

В то время как службы Windows являются простыми (-но) для разработки, вы можете рассмотреть структуру Topshelf с открытым исходным кодом, чтобы облегчить некоторые из связанные с разработкой и развертыванием, которые обычно приходят с ними.

И, честно говоря, помните, что cron не является частью PHP, конечно, просто инструментом, который может быть доступен вам в средах хостинга PHP * nix: ASP.NET ничем не отличается; вопрос в том, что инструмент cron -like доступен для вас в среде ASP.NET, которая соответствует вашим требованиям и вы предпочитаете.

+2
03 апр. '14 в 2:51
источник

Вы можете посмотреть проект Revalee с открытым исходным кодом.

Вы можете использовать его для планирования веб-обратных вызовов в определенное время. В вашем случае вы можете запланировать веб-обратный вызов (через 10 минут в будущем). Когда ваше приложение получает обратный вызов, он может запланировать следующий 10-минутный обратный вызов. Когда приложение ASP.NET запускается в первый раз, вы планируете первый обратный вызов в Интернете. Поскольку вы пересылаете веб-приложение, вам не нужно беспокоиться о том, что IIS выгружает ваше веб-приложение (что, конечно же, будет).

Например, используя Revalee, вы можете сделать следующее:

  • Зарегистрируйте обратный вызов в будущем (через 10 минут), когда ваше приложение запускается с помощью метода ScheduleTenMinuteCallback() (см. ниже).

    private DateTimeOffet? previousCallbackTime = null;
    
    private void ScheduleTenMinuteCallback()
    {
        // Schedule your callback 10 minutes from now
        DateTimeOffset callbackTime = DateTimeOffset.Now.AddMinutes(10.0);
    
        // Your web service Uri
        Uri callbackUrl = new Uri("http://yourwebapp.com/ScheduledCallback.aspx");
    
        // Register the callback request with the Revalee service
        RevaleeRegistrar.ScheduleCallback(callbackTime, callbackUrl);
    
        previousCallbackTime = callbackTime;
    }
    
  • Когда запланированное задание в сети активируется и вызывает ваше приложение, вы выполняете все действия, которые необходимо выполнить каждые 10 минут и, и вы планируете следующий обратный вызов. Вы делаете это, добавив следующий вызов метода (CallbackMonitor()) к вашему обработчику страницы ScheduledCallback.aspx.

    private void CallbackMonitor()
    {
        if (!previousCallbackTime.HasValue 
            || previousCallbackTime.Value <= DateTimeOffset.Now.AddMinutes(-10.0))
        {
            // Perform your "10 minutes have elapsed" action
    
            // ...do your work here...
    
            // Schedule subsequent 10 minute callback
            ScheduleTenMinuteCallback();
        }
    }
    

Подразумевается, что вы не используете "сторонние службы онлайн-планировщика". Служба Revalee не является сторонней сторонней службой онлайн-планировщика, но вместо этого служба (в частности, служба Windows), которую вы устанавливаете и, полностью контролирует вашу собственную сеть. Он находится и работает на сервере по вашему выбору, скорее всего, за вашим брандмауэром, где он может получать запросы на регистрацию обратного вызова из вашего веб-приложения в IIS. (При необходимости он может быть установлен на веб-сервере IIS.)

Надеюсь, это поможет.

Отказ от ответственности: Я был одним из разработчиков, участвующих в проекте Revalee. Однако, чтобы быть ясным, Revalee является бесплатным, с открытым исходным кодом. Исходный код доступен на GitHub.

0
03 апр. '14 в 14:11
источник

Посмотрите другие вопросы по меткам или Задайте вопрос