2012-01-15 100 views
1

我正在构建一个需要持续监视的站点,以便我们可以检查以确保没有人试图“欺骗系统”(这是一款游戏)。我只想有一个计时器开始(当我发布的网站),并永不停止。它必须不断监控db记录,比如每x分钟。如何在没有用户交互的情况下在ASP.NET中启动任务

我想我需要的是一个Web服务,但也许有另一种方法来解决这个问题?

注意:将不会有'客户端'连接到'服务'或任何它将是。

+1

类不启动,进程做。 – 2012-01-15 06:06:07

+0

我很抱歉,我有一个脑子大脑的时刻,我用错了词。这可能与Razor代码/ webmatrix网络应用程序? – Jason 2012-01-15 06:07:35

+2

假设您控制服务器,您可能需要在服务器上运行的Windows服务。互联网上有很多资源描述如何构建一个。 – 2012-01-15 06:08:57

回答

2

杰夫阿特伍德(StackOverflow上的联合创始人)介绍了一个有趣的技术,这样做,在这里:http://blog.stackoverflow.com/2008/07/easy-background-tasks-in-aspnet/

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

+0

缓存过期+1。我自己也使用了(独立思考)这种技术,因为您可以指定要过期的缓存对象的回调。在global.asax应用程序启动时设置或从AssemblyInfo PreApplicationStartup – 2012-10-02 14:50:34

0

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

3

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

此外,如果你正在使用.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

+1中设置自动启动功能。不知道这一点。 – 2012-01-15 06:17:52

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. 使用schedular http://quartznet.sourceforge.net 创建作业来监视数据。

谢谢。

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 
} 

然后,您可以将工作线程休眠一段时间,然后稍后重新开始工作。

+0

啊,真棒。非常感谢。我有什么理由不能从这个文件访问数据库?即使我把声明放在最上面也没有。我做错了吗?这只是一个简单的选择查询。 – Jason 2012-01-19 03:43:15

+0

@Jason我不知道确切的原因,但我知道从这一点访问数据库不是一个好主意。你最好在类库中做这件事,然后从你的web项目中引用它,这样你就可以从Global.asax调用这个功能。我已经这样做了,也可以在您的Web应用程序中包含实用程序类,它可以包含访问数据库的功能。希望这有助于和迟到的答复抱歉。 – a4bike 2012-01-24 15:35:23

相关问题