Периодически делайте веб-запросы для себя, чтобы IIS не убивал приложение

Почему это не работает? IIS убивает мое приложение в любом случае через 20 минут

    protected void Application_Start()
    {
        Task.Factory.StartNew(() => DaemonStuff());
    }

    private void DaemonStuff()
    {
        // Ping to self
        MyWebRequest selfRequest = new MyWebRequest(MyURL, "GET");
        selfRequest.GetResponse();

        // Sleep
        Thread.Sleep(1000 * 60 * 5);

    }

То, что я делаю здесь, это посещение моего собственного сайта (с веб-запросом) каждые 5 минут.

Таким образом, IIS не должен думать, что мой сайт простаивает, потому что его посещают, но это все равно убивает приложение.

Итак: возможно ли подделывать посещения моего сайта каждые 5 минут, чтобы его не убили?

2 ответа

Код, который вы разместили, на самом деле вызывает DaemonStuff() только раз. Затем этот метод спит и возвращается. Вы должны использовать таймер или что-то подобное, чтобы вызывать его повторно, если я не пропустил что-то в коде, который вы опубликовали

Проблема в том, что ASP.NET не знает о работе, выполняемой в фоновом потоке, порожденном с помощью таймера или задачи. Он знает только о работе, связанной с запросом. ASP.NET просто не знает, какую работу вы выполняете, и это не помешает IIS/ASP.NET отключить ваш веб-сайт.

Более надежным решением является использование IRegisteredObject как объяснено здесь.

Наконец, вы уверены, что MyURL верно? Проверьте журналы IIS для этого.

Наконец, возможно, лучшее решение - отключить тайм-аут простоя в IIS: просто измените "Тайм-аут простоя" в дополнительных настройках пула.

Другие вопросы по тегам