C# 如果没有用户交互,如何在ASP.NET中启动任务

C# 如果没有用户交互,如何在ASP.NET中启动任务,c#,asp.net,.net,razor,webmatrix,C#,Asp.net,.net,Razor,Webmatrix,我正在建立一个需要持续监控的网站,这样我们可以检查以确保没有人试图“欺骗系统”(这是一个游戏)。我只想有一个计时器,开始(当我发布网站时),永远不会停止。它必须不断地监视数据库记录,比如说,每x分钟一次 我想我需要的是一个Web服务,但也许有另一种方法来实现这一点 注意:不会有任何“客户端”连接到此“服务”或其他任何服务。Jeff Atwood(StackOverflow的共同创建者)在这里介绍了一种有趣的技术: 基本上,它涉及劫持ASP.NET缓存过期系统,以便按照定期计划执行定期任务。Jef

我正在建立一个需要持续监控的网站,这样我们可以检查以确保没有人试图“欺骗系统”(这是一个游戏)。我只想有一个计时器,开始(当我发布网站时),永远不会停止。它必须不断地监视数据库记录,比如说,每x分钟一次

我想我需要的是一个Web服务,但也许有另一种方法来实现这一点

注意:不会有任何“客户端”连接到此“服务”或其他任何服务。

Jeff Atwood(StackOverflow的共同创建者)在这里介绍了一种有趣的技术:

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

Jeff Atwood(StackOverflow的共同创建者)在这里介绍了一种有趣的技术:


基本上,它涉及劫持ASP.NET缓存过期系统,以便按常规计划执行定期任务。

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

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

为什么不使用Windows服务?如果这不是一个选项,那么您需要至少向Web服务器发出一个初始请求,以启动一个单独的工作线程

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


为什么不使用Windows服务?如果这不是一个选项,那么您需要至少向Web服务器发出一个初始请求,以启动一个单独的工作线程

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


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

有两种方法

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

  • 以上两种方法都需要启动一些监视线程

  • 创建监视数据的WindowsService。即使您在第三方托管服务上托管了站点,也要创建web服务,为您提供数据以供监控

  • 使用时间表 创建用于监视数据的作业


  • 谢谢。

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

    有两种方法

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

  • 以上两种方法都需要启动一些监视线程

  • 创建监视数据的WindowsService。即使您在第三方托管服务上托管了站点,也要创建web服务,为您提供数据以供监控

  • 使用时间表 创建用于监视数据的作业


  • 谢谢。

    另一种解决方法是使用Global.asax的应用程序启动方法。有关更多详细信息,请参阅

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

    然后,您可以将工作线程休眠一段时间,然后每隔一段时间将其恢复工作。

    另一种解决方法是使用Global.asax的应用程序启动方法。有关更多详细信息,请参阅

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

    然后,您可以让worker线程休眠一段时间,然后每隔一段时间将其恢复工作。

    类不会启动,进程会启动。很抱歉,我在大脑中遇到了使用错误单词的majumbo时刻。Razor code/webmatrix web应用程序是否可能做到这一点?假设您控制服务器,您可能希望在服务器上运行Windows服务。互联网上有很多资源描述如何构建一个。课程不是开始的,过程是开始的。我很抱歉,我有一个大脑majumbo时刻,我用错了词。Razor code/webmatrix web应用程序是否可能做到这一点?假设您控制服务器,您可能希望在服务器上运行Windows服务。互联网上有很多资源描述如何建造一个。啊,太棒了。非常感谢你。是否有任何原因导致我无法从此文件访问数据库?即使我把usingdeclarationn放在最上面也不行。我做错了吗?这只是一个简单的select查询。@Jason我不知道确切的原因,但我知道从现在开始访问数据库不是一个好主意。最好在类库中执行,然后从web项目中引用,这样就可以从Global.asax调用该功能。我已经这样做了,你也可以在你的web应用程序中有实用程序类,可以包含访问数据库的功能。希望这对你有所帮助,很抱歉回复太晚。啊,太棒了。非常感谢你。是否有任何原因导致我无法从此文件访问数据库?即使我把usingdeclarationn放在最上面也不行。我做错了吗?这只是一个简单的select查询。@Jason我不知道确切的原因,但我知道从现在开始访问数据库不是一个好主意。最好在类库中执行,然后从web项目中引用,这样就可以从Global.asax调用该功能。我已经这样做了,你也可以在你的web应用程序中有实用程序类,可以包含访问数据库的功能。希望这有帮助,并为迟来的答复感到抱歉。缓存过期+1。我自己使用过(独立思考过)这种技术,因为您可以指定一个来自即将过期的缓存对象的回调。在global.asax应用程序启动中或从AssemblyInfo PreApplicationStartup+1设置缓存过期。我自己使用过(独立思考过)这种技术,因为您可以从缓存ob指定回调