Мне нужно, чтобы задачи выполнялись в моем веб-приложении.Я читал, и большинство ответов - использовать планировщик задач в Windows, но мне нужно иметь его в самом веб-приложении.
Я наконец-то получил что-то, что почти работает, но у меня все еще есть некоторыепроблемы:
using System;
using System.Timers;
using System.IO;
namespace ServiceIIS
{
public static class Servicios
{
public static bool serviceStarted = false;
static Timer serviceLoad = new Timer();
public static void serviceLoader()
{
if (!serviceStarted)
{
GC.KeepAlive(serviceStarted);
GC.KeepAlive(serviceLoad);
serviceStarted = true;
double Intervalo = loadData();
serviceLoad.Interval = Intervalo;
serviceLoad.Elapsed += new ElapsedEventHandler(serviceLoad_Elapsed);
serviceLoad.Enabled = true;
}
}
static void serviceLoad_Elapsed(object sender, ElapsedEventArgs e)
{
serviceLoad.Stop();
double Intervalo = loadData();
serviceLoad.Interval = Intervalo;
serviceLoad.Start();
}
static double loadData()
{
string dailyLoadTime = "00:00:00";
string log = "";
/*
loadData Code
log = resultMessage;
*/
using (StreamWriter w = File.AppendText("c:\\log.txt"))
{
writeLog(log, w);
w.Close();
}
return (Convert.ToDateTime(DateTime.Today.ToString("yyyy-MM-ddT") + dailyLoadTime).AddDays(1) - DateTime.Now).TotalMilliseconds;
}
public static void writeLog(string resultMessage, TextWriter w)
{
w.Write("\r\nLog : ");
w.WriteLine("{0} {1}", DateTime.Now.ToLongTimeString(),
DateTime.Now.ToLongDateString());
w.WriteLine(" :");
w.WriteLine(" :{0}", resultMessage);
w.WriteLine("-------------------------------");
w.Flush();
}
}
}
serviceLoader () будет вызван, если serviceStarted имеет значение false, тогда я говорю сборщику мусора игнорировать serviceStarted и serviceLoad для очистки.Вызов loadData () в первый раз, чтобы получить данные и «сгенерировать» интервал для таймера, чтобы дождаться повторного вызова loadData ().Затем я создаю обработчик событий и запускаю таймер.
Используя процедуру writeLog (), я знаю, когда вызывается loadData ().В ожидании времени, когда он должен быть вызван (00:00:00 часов), нет вызова loadData (), но до другого времени ... это может быть потому, что способ вычисления интервала не совсем корректен.
Затем он снова вызывается в тот же день и один раз на следующий день.Наконец, после второго дня вообще нет вызова для loadData (), поэтому я полагаю, что это потому, что сборщик мусора удалил его, снова вызывая serviceLoader (), и одновременно вызывается loadData (), сообщая мне, что в действительности serviceStarted имеетбыл очищен и, конечно, serveLoad также был очищен.
У вас есть представление о том, что я делаю неправильно, и как я могу заставить это работать?Я не мог поверить, что это невозможно сделать с помощью IIS.
Заранее благодарю за то, что уделили мне время на чтение.
Старейшина