2008-11-15 8 views
3

Я долго играл с идеей какой-то страницы автоматической очистки, которая выполняет обычные задачи обеспечения и вызывается из области действия текущей страницы посредством вызова 1x1 пикселя gif с страницей asp.net как параметр src. Однако одна вещь, которую я никогда не решал, заключается в том, как обрабатывать сроки выполнения такой страницы, чтобы она не выполнялась с каждым запросом, может быть, как ... каждый пятый запрос. или каждые 30 минут или какой-либо другой интервал.страница автозавершения ASP.NET

Как вы считаете, строите такой механизм?

+0

Являются ли виды задач по очистке и обслуживанию, которые вы имеете в виду, специфичные для ASP.NET? Ограничены ли вы тем, как вы можете планировать эти задачи, что привело вас к рассмотрению использования метода запуска запросов от браузеров? Может ли применимый код очистить после себя? – 2008-11-15 01:11:43

+0

Вид очистки кода, о котором я говорю, это когда файлы или данные хранятся во время сеанса, и сеанс заброшен. Я запускаю веб-ферму, обслуживающую несколько приложений, и событие session_end ненадежны в этой среде. – Chris 2008-11-16 03:27:41

ответ

4

Я сталкивался с этой ситуацией много раз, и обычно я просто использую планировщик задач, чтобы просто вызвать страницу, чтобы она была последовательной и надежной. Проблема, связанная с ссылкой на страницу, заключается в том, что вы должны быть уверены, что всегда будут запросы на вашу страницу. Если вы можете это гарантировать, просто сохраните переменную на уровне приложения с отметкой времени последнего запуска задачи и проверьте, чтобы каждая страница проверяла эту метку времени и обновляла ее, как только приходит запрос, который прошел определенный порог.

+0

Это, безусловно, самый надежный и простой вариант. – 2008-11-15 03:04:33

+0

Это было самое последнее решение, которое я использовал - простая задача, запланированная для Windows, которая запускала wget на странице. Рад узнать, что это имеет смысл и для кого-то другого. – Chris 2008-11-16 02:59:19

0

Я установил таймер и запустил задачу очистки при срабатывании таймера. Если вы хотите настроить очистку по количеству запросов, вы можете сделать более короткий интервал таймера, а затем проверить количество запросов при срабатывании таймера; если количество запросов слишком низкое, пропустите очистку.

4

Похоже, что вы захотите использовать файл global.asax вместо этого - если вы хотите, чтобы что-то произошло каждый N-й раз. Например, если вы хотите сделать что-то для каждого 5-го посетителя на ваш сайт, вы можете сделать что-то вдоль линий,

void Application_Start(object sender, EventArgs e) 
{ 
    // Code that runs on application startup 
    Application["Sessions"] = 0; 
} 

void Session_Start(object sender, EventArgs e) 
{ 
    // Code that runs when a new session is started 
    Application.Lock(); 
    Application["Sessions"] = (int)Application["Sessions"] + 1; 

    if ((int)Application["Sessions"] % 5 == 0) 
    { 
    DoSomething(); 
    Application["Sessions"] = 0; 
    } 
    Application.UnLock(); 
} 

я сильно рекомендую что-то вдоль этих линий, а не подключая сценарий к источнику файл GIF. У вас гораздо больше контроля и безопасности.

+0

Вы также можете запустить фоновый поток в Application_Start, который спит и выполняет задачи, которые вы хотите. Однако если вы никого не посещаете, он, в конце концов, остановится по мере того, как пул приложений будет убит. Единственный способ - это запланировать задачу. – 2008-11-15 03:02:48

1

Вы считали, что вместо этого используете сервис Windows? Выполнение задач очистки займет поток из пула потоков ASP.NET. Или, если вы очищаете базу данных SQL Server, возможно, задача агента SQL Server будет лучше.

1

Связанная запись из блога stackoverflow: http://blog.stackoverflow.com/2008/07/easy-background-tasks-in-aspnet/.

Другие:

Примечание несколько решений не работают, если у вас не хватает неуклонного движения. Если IIS выгружает приложения, кэш, сеанс и запрос не работают.

Если возможно, установите службу задач Windows для каждой службы. Разработайте схему для динамического добавления/удаления задач.

Если ваше приложение размещено и вы не можете установить услугу, подумайте о том, чтобы увидеть его с помощью монитора сайта - что-то вроде siteuptime. Это сохранит ваше приложение в памяти, позволяет ударить по обработчику или странице действий по сравнению с фиктивным изображением и позволяет вам точно определить, когда он работает.

Смежные вопросы