2016-09-21 91 views
0

我正在开发一个MVC应用程序,它有一个方法,它应该有一天结束。我没有Windows任务调度程序的访问权限,并且不可能实现Windows服务。 (因为部署的包应该给不同的客户,他们有自己的服务器,在这种情况下,我们不会部署Windows服务或使用任务调度器)运行方法在特定时间MVC应用程序

请告诉我有没有任何方法在特定时间执行某些方法。 我看到有使用计时器的方法。但问题是,这项工作应该只需要在一天内完成一次,过程不会超过1分钟。

如果我们使用计时器,资源将分配给计时器服务,这不是一个好方法,因为我猜测,因为这种方法在一天只运行一次。 (过程在其他23个小时59分钟运行,这是浪费资源。我猜计时器的概念是好的,如果过程是在每5,10分钟跑)

请给我方向....

+0

看看石英作业调度器。 – 2016-09-21 10:48:55

+0

“*并且实现Windows服务是不可能的*”,为什么它不可能?当项目部署给你的客户时,它可以安装Windows服务作为部署过程的一部分......如果你想在*客户机器*上每天执行一次方法,那么你必须有一些长期运行的应用程序 – Fabjan

+0

Take看一下HangFire,它的设计目的是描述你的目的,并且可以在给定的时间发布一个工作/方法:http://hangfire.io/ – LDJ

回答

0

我想你已经有一个数据库。创建一个名为LastRun的单个日期时间字段的表。在此字段中保存您的方法执行的最后日期和时间。

在Session Start或Application上的MVC应用程序中,将LastRun datetime与当前日期时间进行比较,并决定是否要执行上述方法。该方法执行后更新LastRun值。

+0

只需在application_start()中检查下面的代码,因为这是日终程序,应该在午夜十二点的时候运行。 \t DateTime dt = Convert.ToDateTime(“2016/09/22”); if(DateTime.Today == dt) { int x = 5; } 我将本地计算机时间更改为2016/09/21 11:59 pm,并等待直到触发bolow代码(在“if”块内添加断点)但它没有触发。 – weeraa

+0

上述建议的方法的缺点是您将需要一个新的应用程序或会话启动事件来触发它。 – Trifon