W IIS 6 przejdź do sekcji Pule aplikacji i kliknij prawym przyciskiem myszy> Właściwości w puli, na której znajduje się dana aplikacja ASP.NET. Przejdź do karty Wydajność i odznacz pole "Wyłącz procesy robocze po bezczynności dla:"
W IIS 7 przejdź do panelu Połączenia i znajdź pule aplikacji, a następnie wybierz Ustawienia zaawansowane dla puli, w której znajduje się aplikacja. Znajdź właściwość "Limit czasu bezczynności" i ustaw go na "0" (to wyłącza).
Ustawieniem domyślnym jest 20 minut bezczynności. Odznaczając to pole, po załadowaniu AppDomain przez proces roboczy, nigdy nie umrze (chyba że zabijesz proces lub coś w tym stylu). Domyślnie usługi IIS będą przetwarzać proces po osiągnięciu pewnego limitu, np. Limitu pamięci, ale będzie on również uruchamiał nowy i "przesuwał" wszystkie przychodzące żądania do czasu, aż stary nie będzie używany, aby zminimalizować zakłócenia.
Jeśli nie masz bezpośredniej kontroli nad konfiguracją IIS (na przykład host wspólny), najlepiej jest mieć małą aplikację uruchomioną w osobnym systemie - na przykład stale działającą stację roboczą - która trafia na Twoją witrynę co x minut, aby zapobiec przekroczeniu limitu czasu puli aplikacji. Nic nadzwyczajnego - zrobi to prosta pętla WebRequest i while() w aplikacji konsolowej.
W zależności od kodu, który działa, chciałbym zrobić to usługa systemu Windows, który działa na serwerze. – Martin
Idealnie tak, ten kod powinien być w usłudze. Jednak dla elastyczności i przenośności zdecydowaliśmy się na uruchomienie kodu z pliku global.asax.cs. –