2011-03-08 2 views
3

Моя задача - создать приложение ASP.NET с фрагментом кода, который будет автоматически запускаться каждые полчаса. Этот код должен добавлять запись в файл каждые полчаса. Он не должен зависеть от запросов пользователей (независимо от того, происходят они или нет).
1) Я пишу свой код в Application.Start методом файла Global.asax. Я прав?
2) Имею ли я какое-либо отношение к настройкам хоста (IIS) (например, разрешения на изменение для записи файла и т. Д.)?Автоматическое выполнение кода в ASP.NET

Я уже пробовал просто положить код для записи в файл в цикл в методе Application.Start, а затем просто скопировать каталог проекта на сервер. Однако это не сработало.

ответ

1

Если вы вынуждены использовать ASP.NET, я бы порекомендовал найденная техника here, в которой используется истечение срока действия кеша, чтобы запустить ASP.NET и запустить события по таймеру. Но всегда есть опасность, что если ваше приложение умрет, таймер не будет перезагружен до тех пор, пока не будет запрошена страница, начиная приложение.

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

4

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

void Application_Start(...) 
{ 
    Thread thread = new Thread(CronThread); 
    thread.IsBackground = true; 
    thread.Start(); 
} 

private void CronThread() 
{ 
    while(true) 
    { 
     Thread.Sleep(TimeSpan.FromMinutes(30)); 
     // Do something every half hour 
    } 
} 
+1

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

1

Нет, такой код не пойдет в вашем методе Application_Start. Этот метод вызывается, когда приложение запускается или когда оно сбрасывается и не имеет ничего общего с «каждые полчаса».

Лучший способ справиться с этим, BY FAR - создать отдельное приложение на одном компьютере или на другом компьютере, имеющем доступ к «файлу» (независимо от того, что это означает). ASP.NET не настроен для событий таймера, и любая попытка сделать это в ASP.NET, скорее всего, повлияет на производительность вашего сайта.

3

Это место, где нужно сделать это в приложении ASP.Net (см. Сообщение Pauls для получения более подробной информации о том, как вы это сделаете), однако выполнение вашей задачи таким образом имеет ряд недостатков, не в последнюю очередь из которых заключается в том, что ваша задача будет запускаться только тогда, когда ваше приложение (то есть, когда первый пользователь обращается к вашему сайту) - если рабочий процесс ASP.net останавливается и не запускает ваше приложение по какой бы то ни было причине, ваша «фоновая задача» остановится слишком.

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

Смотрите эту ссылку для примера того, как создать простую службу Windows с помощью C#:

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