asp.net中调度任务的方式(不写windows scheduler)

Posted

技术标签:

【中文标题】asp.net中调度任务的方式(不写windows scheduler)【英文标题】:Ways of scheduling tasks (without writing windows scheduler) in asp.net 【发布时间】:2011-03-15 18:25:00 【问题描述】:

我喜欢共享主机,他们不允许我使用 Windows 调度程序...那么在 asp.net 中实现计划任务的方法是什么(定时邮件)...我刚看到 Jeff 的background process阿特伍德博客……可靠吗?或任何其他执行计划任务的方式...

然后我找到了quartz.net,但我找不到将quartz.net 嵌入asp.net 的简单示例(没有将Quartz.Net 服务器安装为独立的Windows 服务)。 ..有关quartz.net的任何建议...

【问题讨论】:

***.com/questions/3243400/…...你在这里问了同样的问题... 这不是你其他问题的重复吗? 你最终找到了什么解决方案?我确实有同样的要求,但问题是应用程序池重新启动时 Quartz.net 停止工作:( 【参考方案1】:

您可以简单地编写一个 ASP.Net 页面来执行您的任务,例如发送邮件。然后使用SetCronJob 之类的在线调度服务按计划调用服务器上页面的 URL。

这种非常简单的方法的缺点是您依赖于外部服务。

【讨论】:

完美!正是我需要的,最坏的情况下,我将创建一些非常简单的东西,从我的机器上运行作为备份。【参考方案2】:

我正在调查 Microsoft.Web.Administration assembly Schedule Class 以实现相同的目标,但似乎该类只能用于安排 IIS 工作进程重启,这里是 example of creating app pools and setting periodical restart。

因此,唯一的方法是计划重新启动 ASP.NET 应用程序,然后在 Application_Start 中执行计划的工作。 但那是丑陋的 hack 不是解决方案,所以最后我为我们已经在 Web 服务器上运行的本土备份 Windows 服务添加了调度功能,因此 IMO Quartz.net 是您的最佳解决方案.也许您可以说服您的网络提供商安装 Quartz.net,所有其他解决方案似乎都会给您带来或多或少的问题。

【讨论】:

【参考方案3】:

.NET Scheduled Timer

Databound Schedule controls

【讨论】:

这可能会对您有所帮助:codeproject.com/KB/dotnet/… 或查看更新链接 2 不会帮助 Pandya。不允许您运行 Windows 调度程序的主机商几乎不会批准单独的 Windows 服务。【参考方案4】:

您可以从this 获取想法并将您的任务放入 KeepAlive 方法中。希望!有帮助。

【讨论】:

【参考方案5】:

不久前我也遇到了同样的问题,并且没有使用第三方服务,没有很好的解决方法。

也就是说,我使用了 .NET 应用程序缓存对象,其有效期为 24 小时。

Cache["DailyTask"] = true;

然后在我的基本页面类中,每次发出页面请求时,我都会检查该变量是否存在,如果存在,则运行该任务。这样做的缺点是,您依赖于向您的应用程序发出的页面请求。

最后,我看到的另一种方法是在缓存到期时设置回调(CacheItemRemovedCallback 方法),然后链接该方法以将新项目插入缓存中,该缓存也有回调,因此循环重复。

【讨论】:

【参考方案6】:

System.Timers.Timer - http://msdn.microsoft.com/en-us/library/system.timers.timer.aspx

在你的 global.asax 中启动它

【讨论】:

以上是关于asp.net中调度任务的方式(不写windows scheduler)的主要内容,如果未能解决你的问题,请参考以下文章

2021-06-27 .NET高级班 72-ASP.NET Core Hangfire任务调度的使用

如何在 ASP.Net Core 中使用 IHostedService

.Net / Asp.Net Web api 后台任务

如何通过asp.net schtasks将参数传递给bat文件

ASP.NET Core2.2+Quartz.Net 实现web定时任务

在 C#、asp.net、windows 身份中模拟