IIS7 возможно ли заставить его запускать веб-страницу каждые 5 минут? - PullRequest
0 голосов
/ 29 декабря 2011

У меня есть IIS7.5.В настоящее время у нас есть взвешенный рейтинг для юридических лиц на нашем сайте.Вычисление взвешенного рейтинга является чрезвычайно медленным, до момента загрузки домашней страницы теперь требуется более 10 секунд для загрузки.

Чтобы решить эту проблему, я хотел бы сохранить весовые коэффициенты в базе данных для каждого объекта и иметьIIS запускает сценарий каждые 5-10 минут, который пересчитывает веса.

Как мне это сделать?Мне было бы проще, если бы он запускал URL веб-страницы.

Ответы [ 5 ]

3 голосов
/ 29 декабря 2011

Одним из подходов является использование службы Windows для этого, а не вызов веб-URL.

Затем он может работать совершенно вне диапазона в фоновом режиме для выполнения вычислений. Подробности об этом здесь:

http://msdn.microsoft.com/en-us/library/d56de412%28v=VS.100%29.aspx

Несколько преимуществ:

  • Ваш процесс IIS не будет затронут, поэтому ваши пользователи не увидят замедления
  • Служба может быть остановлена ​​или запущена независимо от веб-сайта

Однако для установки и запуска службы вам потребуется достаточно полный доступ к серверу.

3 голосов
/ 29 декабря 2011

Для этого можно использовать запись Cache, срок действия которой истекает через 10 минут.

При добавлении элемента используйте функцию обратного вызова для CacheItemRemovedCallbackпараметр - в этой функции обратного вызова сделайте вашу базу данных и заново добавьте запись в кеше с истекающим сроком действия.

Другие параметры включают:

Служба Windows и расписание задач по-прежнему требуют наличияспособ сообщить результаты IIS.

2 голосов
/ 29 декабря 2011

Чтобы не использовать клиент, только сервер для непрерывного вызова этой функции, вы можете создать поток на сервере для вызова функции, которая ее вычисляет.

Лучший способ запустить поток или таймер - в Global.asax, например:

public class Global : System.Web.HttpApplication
{
    private Timer _timer;

    void Application_Start(object sender, EventArgs e)
    {
        int period = 1000 * 60 * 10; // 10 minutes
        _timer = new Timer(TimerCallback, null, 1000, period);
    }

    private void TimerCallback(object state)
    {
         // Do your stuff here
    }
}

}

0 голосов
/ 30 декабря 2011

Ранее я делал что-то подобное, и я использовал запланированные задачи Windows, чтобы вызывать мой сценарий через определенные промежутки времени.

0 голосов
/ 29 декабря 2011

Простой пакетный файл с WGET или аналогичным, и справка из запланированных задач сделает это.

http://www.gnu.org/software/wget/

Вы можете попробовать это, чтобы проверить эту идею:

wget http://localhost/filename.ashx
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...