代码之家  ›  专栏  ›  技术社区  ›  Jason N. Gaylord

最佳ASP.NET后台服务实现

  •  1
  • Jason N. Gaylord  · 技术社区  · 15 年前

    ASP.NET应用程序中多个后台服务的最佳实现是什么?

    1. 计时器回调

      Timer timer = new Timer(new TimerCallback(MyWorkCallback), HttpContext, 5000, 5000);
      
    2. 螺纹或螺纹工具

      Thread thread = new Thread(Work);
      thread.IsBackground = true;
      thread.Start();
      
    3. 背景工作者

      BackgroundWorker worker = new BackgroundWorker(); 
      worker.DoWork += new DoWorkEventHandler(DoMyWork);
      worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(DoMyWork_Completed); 
      worker.RunWorkerAsync();
      
    4. 像缓存一样 http://www.codeproject.com/KB/aspnet/ASPNETService.aspx (位于Jeff Atwood's post here )

    我需要在给定的时间运行多个后台“服务”。一个服务可能每5分钟运行一次,而另一个服务可能每天运行一次。一次运行的服务不会超过10个。

    3 回复  |  直到 15 年前
        1
  •  2
  •   Noon Silk    15 年前

    好吧,你要的不是简单的线程,而是线程工具。

    如果是我,我会在Windows服务中运行它,并通过msmq与它通信。

        2
  •  0
  •   dariol    15 年前

    您应该实现一些任务状态。应用程序回收后,后台服务应修复损坏的任务。如果任务在事务中,那么这种行为就不会有问题。

        3
  •  0
  •   Tormod Hystad    15 年前

    原始海报的任何建议都不会扩展到多个服务器。

    我想要同样的东西: 在不影响当前用户请求的情况下,一种健壮且简单易用的调度常规后台任务和执行即席重处理(重建缓存等)的方法。

    我希望在Web应用程序上下文中运行任务,以a)从web.config获取配置(避免重复配置),b)与Web应用程序一起部署(轻松部署)。 我需要它为网站传播到多个服务器工作。

    我发现只有一种方法可以提供我想要的东西:

    (1)为每个任务创建一个.aspx页面,并在一个单独的服务器上设置一个wget计划任务,该服务器在网站上调用此.aspx。我已经实现了这种方法,而且它是有效的,但是我不喜欢它100%,因为计划的任务依赖性,而且它不允许我在后台执行特别重要的任务。