在 ASP.NET 上启动维护过程的最佳实践是啥 [关闭]

Posted

技术标签:

【中文标题】在 ASP.NET 上启动维护过程的最佳实践是啥 [关闭]【英文标题】:What is the Best Practice to Kick-off Maintenance Process on ASP.NET [closed]在 ASP.NET 上启动维护过程的最佳实践是什么 [关闭] 【发布时间】:2008-09-05 13:38:12 【问题描述】:

给定一个 ASP.NET 应用程序,我需要定期(每天、每小时等)运行一个维护过程。

在不依赖外部进程(如服务器上的计划任务)的情况下完成此任务的最佳方法是什么(假设我无权访问服务器 - 共享托管环境)。

【问题讨论】:

这个问题与 Stack Overflow 无关,因为它正在寻求最佳实践,这会吸引固执己见的答案。 【参考方案1】:

*** 的做法如下:

private static CacheItemRemovedCallback OnCacheRemove = null;

protected void Application_Start(object sender, EventArgs e)

    AddTask("DoStuff", 60);


private void AddTask(string name, int seconds)

    OnCacheRemove = new CacheItemRemovedCallback(CacheItemRemoved);
    HttpRuntime.Cache.Insert(name, seconds, null,
        DateTime.Now.AddSeconds(seconds), Cache.NoSlidingExpiration,
        CacheItemPriority.NotRemovable, OnCacheRemove);


public void CacheItemRemoved(string k, object v, CacheItemRemovedReason r)

    // do stuff here if it matches our taskname, like WebRequest
    // re-add our task so it recurs
    AddTask(k, Convert.ToInt32(v));

详情:[https://blog.***.com/2008/07/easy-background-tasks-in-aspnet/][1] [1]:https://blog.***.com/2008/07/easy-background-tasks-in-aspnet/

【讨论】:

Jeff Atwood 说:2009 年 2 月 12 日上午 6:50 不,我们已经切换到专门的任务。我们绝对超越了这种技术。我确实认为这对于小型网站来说很好!【参考方案2】:

如果您不需要在预定时间执行此操作,而只需要“偶尔”清理一下,那么一种方法是在您的 Global.asax Session_OnEnd() 中创建一个函数,该函数将创建一个介于 1 到 100 之间的随机数,如果是 50,则执行维护任务。

当然,您可以减少“100”以使任务更频繁地发生。

http://www.codeproject.com/aspnet/ASPNETService.asp 上还有一篇题为“使用 ASP.NET 模拟 Windows 服务以运行计划作业”的文章,该文章使用过期缓存来模拟计时器。它声称它可以在任何托管站点上运行。

如果您使用的是最后一个,请阅读有关此技术的帖子中的此评论:

你需要非常小心 任务运行的长度。每一个新的 任务是一个新的工作线程,并且 数量有限 - 如 它从托管的“借用”线程 线程池。

从框架 v3.5 开始 最大线程数是 从 25 增加到 250 增加了 10 倍。但是 现在有一个对数启动 它们,因此它分配了更多线程 它对他们变得更吝啬。如果你跑 中的可用线程不足 托管线程池 - 您的回复 时代将要经历 屋顶。

你在这里真正写的是 消息/排队系统。

如果您正在执行更新等操作 缓存,然后无论如何 - 踢 关闭一项新任务。如果你在做 像下载一个二级 HTTP资源或某种 密集的数据库工作——写一个 Windows 服务并使用一个队列 让您更好地控制多少 你每次都“咬”掉。

【讨论】:

【参考方案3】:

虽然 Cache 解决方案适用于简单的情况,但如果您的日程安排需要发生变化,您将很不走运。相反,您可以使用Quartz.NET,它是流行的java 框架Quartz 的一个端口,它非常灵活。

【讨论】:

【参考方案4】:

虽然 *** 执行此操作的方式绝对是独一无二的,但您可能还需要监视此 question,因为它相关。

【讨论】:

【参考方案5】:

这是一个外部进程,我不知道它有多可靠,但你可以在一台你知道总是在www.webcron.org 上的机器上设置类似的东西。

基本上,它的作用是按照您请求的时间表访问您请求的页面。

您基本上可以让任何内容定期访问页面,从而启动您的维护任务。

Jeff 和 Joel 在最近的播客中也讨论了通过其他方法做类似的事情。

【讨论】:

以上是关于在 ASP.NET 上启动维护过程的最佳实践是啥 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

在 ASP.NET WebApi 中路由相关实体的最佳实践是啥

带有 Ambari 的 NiFi 集群 - 维护的最佳实践是啥?

处理 javascript 和 css 文件的最佳实践是啥

在 Linux 上部署 ASP.NET MVC:最佳实践、工具和惊喜

ASP.NET - 阻止应用程序使用的最佳方法是啥?

维护不同 Worklight Studio 补丁程序版本的最佳实践