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
如何通过asp.net schtasks将参数传递给bat文件