带有C#的任务计划程序IIS端
本文关键字:程序 IIS 计划 任务 带有 | 更新日期: 2023-09-27 18:27:35
我需要在web应用程序中运行任务。我一直在阅读,大多数答案都是在Windows中使用任务调度程序,但我需要的是在web应用程序本身中使用它。
我终于得到了一些几乎有效的东西,但我仍然有一些麻烦:
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();
}
}
}
如果serviceStarted为false,将调用serviceLoader(),然后我告诉垃圾收集器忽略serviceStarted和要清理的serviceLoad。第一次调用loadData()以获取数据,并"生成"计时器等待的时间间隔,直到再次调用loadData()。然后我创建事件处理程序并启动计时器。
使用writeLog()过程,我知道何时调用loadData()。等待应该调用它的时间(00:00:00小时),没有对loadData()的调用,但直到其他时间。。。这可能是因为我计算区间的方式并不完全正确。
然后在同一天再次调用,第二天调用一次。最后,在第二天之后,根本没有对loadData()的调用,所以我想这是因为垃圾收集器删除了它,再次调用serviceLoader(),同时调用loadData(。
你知道我做错了什么吗?我该怎么做?我简直不敢相信使用IIS没有办法做到这一点。
提前感谢您花时间阅读本文。
老年
您编写的代码似乎没有入口点。典型的aspnet条目是Page_Load
,但在您的用途中,必须在Global.asax
中使用Application_Start
。
无论如何,IIS web应用程序不打算承载计划任务,所以我建议开发一个.exe,由任务调度程序或Windows服务调用。
您应该在Windows服务而不是IIS中实现这种逻辑。