2012-03-14 46 views
3

准确地说:我有一个.NET web表单系统。我需要一种方法来检查一些值并执行任务,具体取决于这些值的周期性。假设:每个月我都要检查我的客户信用卡是否仍然有效。还有一些其他任务/短期检查。Web应用程序中用于定期任务的子系统

该主题的最佳方法是什么?我想过Windows服务,但我读了WCF。请告知什么是解决这一任务的现代和好方法。我正在考虑.NET 4.0。

+0

重要的一点是,您的定期任务是否需要与用户的任何界面,或者是否可以完全自主? – 2012-03-14 00:42:20

+0

请不要在“.NET”等前加上标题。这就是标签的用途。 – 2012-03-14 01:09:01

+0

一个简单的方法就是检查慢定时器和应用程序启动时的定期任务。 – kenny 2012-03-14 01:17:10

回答

4

WCF只是一个可以在Windows服务或IIS中运行的接口。您使用此WCF界面来触发一些同步或异步操作。

您的情况听起来像您希望计时器上的Windows服务对存储在数据库或文件中的数据执行验证。

如果你想按需启动一个进程,那么添加一个WCF端点可能是有用的,如果定时器方法足够好,那么你不需要打扰WCF。

参考在Windows进程托管WCF

3

正如您所猜测,Windows服务是一个很好的办法解决这个问题。

同样,您可以编写一个控制台应用程序并使其通过Windows中的计划任务运行。

这取决于您的后端如何工作以及您最熟悉的内容。

编写控制台应用程序非常简单,但它不是最好的方法,因为您需要确保用户已登录,以便计划的任务可以运行。

一项服务实施稍微复杂一点,但它具有正确集成到操作系统中的好处。

MSDN有很好的指导作用,以C#编写服务,而你并不一定需要WCF: http://msdn.microsoft.com/en-us/library/aa984464(v=vs.71).aspx

1

如果您在有限的服务器控件(即只普通的HTTP页面允许):

您还可以使用网页触发任务 - 这样,你不需要任何额外的组件安装在服务器上。比其他机器配置定期请求触发任务的页面。确保任务可重新启动并且足够短 - 这样您就可以按照常规页面请求完成每项任务。页面可以响应“下一个任务运行”数据,这样你的客户端页面就可以继续ping服务器,直到整个操作完成。

注意:由于应用程序池/应用程序域的回收,尝试在Web服务进程中运行长时间运行的任务是不可靠的。

+1

另外,如果您*需要*您的任务每两周运行一次,这种方法不能确保有人在您需要时访问网站;但正如阿列克谢说的那样;如果你没有服务器访问权限,那么这是实现目标的一种方式。不建议在任何其他情况! – 2012-03-14 01:17:02