如何在没有用户交互的情况下在ASP.NET中启动任务

时间:2012-01-15 05:59:08

标签: c# asp.net .net razor webmatrix

我正在建立一个需要持续监控的网站,以便我们可以检查以确保没有人试图“欺骗系统”(这是一个游戏)。我只想要一个启动的计时器(当我发布网站时)并且永远不会停止。并且必须每隔x分钟持续监控数据库记录。

我认为我需要的是Web服务,但也许还有另一种方法可以解决这个问题吗?

注意:没有'client / s'连接到这个'服务'或者它将会是什么。

5 个答案:

答案 0 :(得分:3)

为什么不使用WindowsService?如果那不是一个选项,那么你需要至少一个初始请求到网络服务器来启动一个单独的工作线程。

此外,如果您使用的是.net4和IIS7.5,那么您可以使用asp.net自动启动功能并摆脱启动应用程序的初始请求:

http://weblogs.asp.net/scottgu/archive/2009/09/15/auto-start-asp-net-applications-vs-2010-and-net-4-0-series.aspx

答案 1 :(得分:2)

Jeff Atwood(StackOverflow的共同创建者)在此描述了一种有趣的技术:http://blog.stackoverflow.com/2008/07/easy-background-tasks-in-aspnet/

基本上它涉及劫持ASP.NET缓存过期系统以定期执行定期任务。

答案 2 :(得分:2)

您必须使用ASP.net 4的自动启动功能。

有两种方式

1.http://weblogs.asp.net/scottgu/archive/2009/09/15/auto-start-asp-net-applications-vs-2010-and-net-4-0-series.aspx

  1. http://msdn.microsoft.com/en-us/library/system.web.preapplicationstartmethodattribute.aspx

    以上两者都需要启动一些监控线程。

  2. 创建监控数据的WindowService。即使您在第三方托管服务上托管网站,也可以创建为您提供监控数据的Web服务。

  3. 使用计划http://quartznet.sourceforge.net 创建工作以监控数据。

  4. 感谢。

答案 3 :(得分:1)

另一种方法是使用 Global.asax的Application_Start 方法。有关详细信息,请参阅this page

protected void Application_Start()
{
    //code your initial request to start the task
    //use a thread to start the task in the background
}

然后你可以让工作线程休眠一段时间,然后暂时让它恢复工作。

答案 4 :(得分:0)

由于该服务不会为请求提供服务,但实际上将执行后台任务,我认为Windows服务将是一个不错的选择。 您可以将其设置为在启动时自动启动。 (我假设你拥有网络服务器)。