【问题标题】:Execute method in global.asax every few minutes每隔几分钟执行一次 global.asax 中的方法
【发布时间】:2012-07-06 11:25:59
【问题描述】:

每隔 x 分钟执行 Global.asax 文件中的方法的最有效方法是什么?有没有办法让 ASP.NET 服务器运行一个后台线程,该线程在一段时间后触发一个滴答事件?

【问题讨论】:

    标签: c# asp.net multithreading timer webserver


    【解决方案1】:

    您可以在 Global.asax 的 Application_Start 中有一个计时器,但这不是很灵活,因为您需要向应用程序发出请求以启动计时器。但是,按照 Haacked 的详细说明,这样做是有危险的:

    一个更好的方法是让一个 Web 服务充当 ASP.NET 应用程序的接口,并让一个 Windows 服务在预定的时间间隔调用你的 Web 服务:

    更多细节在这里:

    【讨论】:

    • 如果您无法访问您的服务器(比如说它由第三方托管)并且无法安装 Windows 服务,那么您可以使用 ASP.NET 缓存伪造一个:codeproject.com/Articles/12117/…
    • 在我的特殊情况下,我可以要求请求启动应用程序。不过,您的网络服务想法很棒,对于我的问题的一般情况,绝对是更合适的答案。非常感谢!
    • @ChrisSinclair 100% 正确。您不应该以可以完全访问公司资源或客户资源的心态进行开发。一切都应该是可移植和可扩展的,因此 ASP.net 缓存解决方案确实是唯一的出路。
    【解决方案2】:

    【讨论】:

      【解决方案3】:

      System.Timers.Timer 对象放入Application_Start ()Global.asax

      http://msdn.microsoft.com/en-us/library/system.timers.timer.aspx

      【讨论】:

      • 你比我快 22 秒,但我实际上输入了一些东西 :)
      • 不是一个好主意。 ASP.Net 应用程序可能已关闭(通常是托管 Web 服务器的配置,其中应用程序在一段时间不活动后关闭,仅在收到新请求时才启动)。
      • @MoizTankiwala 是正确的。不是一个好主意。大多数 Web 服务都有超时,您可能无法控制。 Web 服务器可能会崩溃。然后呢!?您可能需要在远程服务上托管您的 ASP.net 页面,该服务至少可以提供一些不会停止的保证 - 云等。尽量避免使用服务器内部来完成这项工作。使用缓存!
      猜你喜欢
      • 2021-04-26
      • 2012-07-14
      • 1970-01-01
      • 2015-05-03
      • 2017-05-08
      • 2020-09-18
      • 1970-01-01
      • 1970-01-01
      • 2017-04-03
      相关资源
      最近更新 更多