【问题标题】:Start timer on web application start在 Web 应用程序启动时启动计时器
【发布时间】:2010-06-09 05:39:36
【问题描述】:

我想在我的应用程序启动时启动一个System.Threading.Timer(也许部署是正确的词)。我看到你可以使用Application_Start(),但这只是fired once the first request comes to the application。我需要在应用程序运行后立即启动计时器,以便即使用户没有与站点交互,它也可以检查要处理的工作。如何让应用程序启动并运行后启动计时器?

【问题讨论】:

  • 快速解决方案:在安装程序中点击该站点
  • 如果您的设置允许,Windows 服务可能是工作进程的更好解决方案。

标签: c# asp.net


【解决方案1】:

您可以为AlwaysRunning 使用新的 ASP.Net 4 模式。这样它就不会等待第一个请求开始

<applicationPools>
     <add name="MyAppWorkerProcess" managedRuntimeVersion="v4.0" 
         startMode="AlwaysRunning" />
</applicationPools> 

见:http://www.asp.net/learn/whitepapers/aspnet4

【讨论】:

    【解决方案2】:

    当应用启动并运行时,应用启动实际上会触发。您遇到的问题是 IIS 在收到第一个请求之前实际上并没有启动应用程序。

    另一件重要的事情是:IIS 可能会因为不活动而关闭您的应用程序。如果您有需要一直运行的东西,您可能会寻找与 ASP.NET 应用程序不同的工具。可能是 Windows 服务,甚至是计划任务。

    【讨论】:

    • 我同意。网络应用不适合非用户发起的任务。
    【解决方案3】:

    这是正常行为 - 应用程序需要由请求页面的人“触发”。

    在 IIS 7.5 和更高版本(例如 win 2008/win7)中,有一个功能可以自动执行此操作 - 详情请参阅此链接:http://visualstudiomagazine.com/articles/2010/02/18/preloading-aspnet-applications.aspx

    在我公司制造的其他 ASP.NET Web 服务器(在 www.neokernel.com 上在线)中,这是通过指定将使用服务器配置文件预加载的某些页面来完成的。本质上,页面被传递到 ASP.NET 处理管道并在任何人请求与该页面关联的 URL 之前编译/启动。

    【讨论】:

      【解决方案4】:

      一种方法是使用 JavaScript 的 setInterval 方法来启动计时器。这需要在每个页面上发生,因此您将其放在母版页中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-08-09
        • 1970-01-01
        • 1970-01-01
        • 2016-08-05
        • 2014-05-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多