Периодически делайте веб-запросы для себя, чтобы 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: просто измените "Тайм-аут простоя" в дополнительных настройках пула.