【问题标题】:How can I start a task in ASP.NET without user interaction如何在没有用户交互的情况下在 ASP.NET 中启动任务
【发布时间】:2012-01-15 05:59:07
【问题描述】:

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

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

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

【问题讨论】:

  • 类不启动,进程启动。
  • 我很抱歉,我有一个大脑巨大的时刻,我用错了词。 Razor 代码/webmatrix 网络应用程序可以做到这一点吗?
  • 假设您控制服务器,您可能需要在服务器上运行的 Windows 服务。互联网上有大量资源描述了如何构建一个。

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


【解决方案1】:

为什么不使用 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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • +1 表示缓存过期。我自己已经使用(独立考虑)这种技术,因为您可以从缓存对象中指定一个即将过期的回调。在 global.asax 应用程序启动或从 AssemblyInfo PreApplicationStartup 中设置
    【解决方案3】:

    您必须使用 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】:

      另一种方法是使用 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
      }
      

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

      【讨论】:

      • 啊,太棒了。非常感谢。有什么原因我不能从这个文件访问数据库吗?即使我将 using declarationn 放在顶部也不行。我做错了吗?这只是一个简单的选择查询。
      • @Jason 我不知道确切的原因,但我知道从此时访问数据库不是一个好主意。您最好在类库中执行此操作,然后从您的 Web 项目中引用它,这样您就可以从 Global.asax 调用该功能。我已经这样做了,你也可以在你的 web 应用程序中拥有实用程序类,其中可以包含访问数据库的功能。希望这会有所帮助,对于迟到的回复感到抱歉。
      【解决方案5】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-11-21
        • 2012-03-10
        • 1970-01-01
        • 1970-01-01
        • 2011-11-28
        • 2020-11-03
        • 2014-11-17
        • 1970-01-01
        相关资源
        最近更新 更多