我正在开发一个ASP.NET Web应用程序。我需要每10分钟触发一些功能。所以目前我正在考虑一项计划任务'或者创建一个Windows服务来调用URL。
但我记得曾经在PHP网站托管空间中使用cron作业做同样的事情。
那么在IIS中有什么类似cron作业的吗?
注意:我预计不会使用第三方在线调度服务。
答案 0 :(得分:4)
苹果和橘子。 cron
是一个Unix服务。 IIS是一个Web服务器。正如cron
未包含在Apache或nginx中一样,没有任何意义上的IIS包含调度程序。但是,您可以使用schtasks.exe
,就像在Unix上使用cron
一样。
您可以在this question中找到更多想法。
答案 1 :(得分:2)
我同意@Amadan - 苹果和橘子。
然而,我倾向于为此目的编写自定义Windows服务,而不是使用Windows任务计划程序。 Another SO question与专业人士交谈每个选项的缺点。
虽然开发Windows服务很简单(很快),但您可以考虑使用开源Topshelf框架来缓解通常随附的一些开发和部署问题。
公平地说,请记住cron
当然不是PHP的一部分,只是* nix PHP托管环境中可用的工具:ASP.NET真的没有什么不同;问题是,在您的ASP.NET环境中,您可以使用cron
类似的工具来满足您的要求而且您更喜欢。
答案 2 :(得分:2)
对于新读者,现在您可以使用 QuartZ Library 从 .Net 或 .Net Core App 本身轻松创建后台 cron 作业。而不是创建任务和 Windows 服务。
答案 3 :(得分:0)
您可能需要查看Revalee开源项目。
您可以使用它在特定时间安排网络回调。在您的情况下,您可以安排Web回调(将来10分钟)。当您的应用程序收到回调时,它可以安排下一个10分钟的回调。当您的ASP.NET应用程序第一次启动时,您将安排第一次Web回调。由于您正在回调Web应用程序,因此您无需担心IIS会卸载您的Web应用程序(当然,它会)。
例如,使用Revalee,您可以执行以下操作:
当您的应用程序通过ScheduleTenMinuteCallback()
方法启动时,注册未来(从现在起10分钟)回调。(见下文)。
private DateTimeOffet? previousCallbackTime = null;
private void ScheduleTenMinuteCallback()
{
// Schedule your callback 10 minutes from now
DateTimeOffset callbackTime = DateTimeOffset.Now.AddMinutes(10.0);
// Your web service's Uri
Uri callbackUrl = new Uri("http://yourwebapp.com/ScheduledCallback.aspx");
// Register the callback request with the Revalee service
RevaleeRegistrar.ScheduleCallback(callbackTime, callbackUrl);
previousCallbackTime = callbackTime;
}
当Web计划任务激活并重新调用您的应用程序时,您每10分钟执行一次您需要执行的操作和您也可以安排下一个回调。您可以通过将以下方法调用(CallbackMonitor()
)添加到ScheduledCallback.aspx
页面处理程序来完成此操作。
private void CallbackMonitor()
{
if (!previousCallbackTime.HasValue
|| previousCallbackTime.Value <= DateTimeOffset.Now.AddMinutes(-10.0))
{
// Perform your "10 minutes have elapsed" action
// ...do your work here...
// Schedule subsequent 10 minute callback
ScheduleTenMinuteCallback();
}
}
您的观点是不使用第三方在线调度服务&#39;了解。 Revalee服务不是外部第三方在线调度程序服务,而是在您自己的网络上完全安装和的服务(更具体地说是Windows服务)。它驻留在您自己选择的服务器上并运行,很可能位于防火墙后面,它可以从IIS上的Web应用程序接收回调注册请求。 (当然,如果需要,它可以安装在IIS Web服务器上。)
我希望这会有所帮助。
免责声明:我是参与Revalee项目的开发人员之一。但需要明确的是,Revalee是免费的开源软件。源代码可在GitHub上找到。