在ASP.NET应用中执行后台任务

为什么要在ASP.NET应用中执行后台任务?

主要是考虑使用后台任务来处理CPU或IO密集的计算。

下面是一些常见的后台任务:

  • 大量的提醒和新闻邮件发送
  • 图片和视频处理(比如批量创建缩略图、格式转换)
  • 从外部文件导入大量数据或导出数据(RSS聚合)
  • 文件操作(创建归档、清理临时文件、日志文件维护)
  • 定时生成自动化报告
  • 数据库维护
  • ……

ASP.NET不知道任何后台线程比如一个计时器或者其他,它只知道和request相关的操作。事实上,在后台长时间的运行某些任务实在不是web server该做的事情,通常都可以用其他的方式来避免这样做,比如:用console application和Windows任务管理器,或者使用Windows服务等。

但是有时考虑到 不想单独部署服务器:开发、部署简单,伸缩简单,省钱,确实想在ASP.NET应用中执行后台任务,还是有一些办法的:

办法1、HostingEnvironment.QueueBackgroundWorkItem

让你调度小型的后台任务,ASP.NET的运行时会跟踪这些任务,并阻止IIS突然结束工作进程直到其完成。由此让ASP.NET应用程序能够可靠地调度异步任务。

不过需要把项目配置为使用.NET 4.5.2

办法2、Hangfire

HangFire是一个开源的类库,提供简单的方法在ASP.NET中执行后台Long-Running任务。这个类库需要一些额外的存储上的支持,SQLServer,Redis或者MSMQ。HangFire的资料在http://hangfire.io/

时间: 2024-09-29 21:15:36

在ASP.NET应用中执行后台任务的相关文章

MVP 2015社区大讲堂之:在ASP.NET应用中执行后台任务

昨天下午,在微软的MVP 2015社区大讲堂上给大家分享了一个题目:在ASP.NET应用中执行后台任务.这是一点都不高大上,并且还有点土气的技术分享.不过我相信很多人都遇到过这样的问题. 虽然是一个很简单的技术,不过来课堂上听讲的同学还是很多,在此再次感谢大家的捧场. 在这个分享中我主要介绍了三种解决方案: QueueBackgroundWorkItem Hangfire Azure WebJobs 也同步演示了这三种方案的基本用法,但是由于是现场演示,所以代码的讲解都是一笔带过.不过还算这三个

【Win 10 应用开发】在App所在的进程中执行后台任务

在以往版本中,后台任务都是以独立的专用进程来运行,因此,定义后台任务代码的类型都要位于 Windows 运行时组件项目中. 不过,在14393中,SDK 作了相应的扩展,不仅支持以前的独立进程中运行后台任务,也允许后台任务与应用程序位于同一个进程中执行,即单进程后台任务(Single – Process). 听起来很高深?其实很Easy,和以往的多进程模式的后台任务差不多,只是有以下两点不同: 对于独立进程的后台任务,实现方法是实现 IBackgroundTask 接口,然后实现 Run 方法:

Asp.Net Page_Load中执行耗时操作,不影响页面展现。

实际应用中要实现A页面跳转到B页面,B页面Load中执行一些耗时的图片处理操作,然后将处理后的图片显示出来,为了让B页面先正常展现,让后再加载数据,需要使用到VS2010中的AJAX控件:ScriptManager,UpdatePanel,Timer,UpdateProgress. B页面代码: <form id="form1" runat="server">     <div style="margin:0 auto;">

执行后台任务的利器&mdash;&mdash;Hangfire

今年1月31日,在微软的MVP 2015社区大讲堂上,我给大家分享了一个演讲:在ASP.NET应用中执行后台任务.其中介绍了三种技术的应用:QueueBackgroundWorkItem.Hangfire和Azure WebJobs.当时由于时间关系,对三者都是简要介绍.今天想和大家着重介绍下Hangfire. Hangfire是一个开源且商业免费使用的工具函数库.可以让你非常容易地在ASP.NET应用(也可以不在ASP.NET应用)中执行多种类型的后台任务,而无需自行定制开发和管理基于Wind

asp优化:改进 ASP 应用程序中的字符串处理性能

摘要:大多数 Active Server Pages (ASP) 应用程序都要通过字符串连接来创建呈现给用户的 HTML 格式的数据.本文对几种创建此 HTML 数据流的方法进行了比较,在特定情况下,某些方法在性能方面要优于其他方法.本文假定您已经具备一定的 ASP 和 Visual Basic 编程方面的知识. 简介 编写 ASP 页面时,开发人员实际上是创建一个格式化的文本流,通过 ASP 提供的 Response 对象写入 Web 客户端.创建此文本流的方法有多种,而您选择的方法将对 We

ASP.NET 中执行 URL 重写

具体实现步骤(其中的一种实现方法): 一.下载相关的DLL(ActionlessForm.dll和UrlRewriter.dll) http://download.csdn.net/detail/yingwanghbx/4510059 二.在项目中引用那两个DLL文件 右击项目,点击Add Reference,选择Browse,然后选择相应的DLL,点击OK即可. 三.添加browser文件 1.右击项目,点击Add-New Item,选择Browser File,取个有意义的名字.在生成的*.

ASP.NET中HttpApplication中ProcessRequest方法中执行的事件顺序;ASP.NET WebForm和MVC整体请求流程图

ASP.NET中HttpApplication中ProcessRequest方法中执行的事件顺序 1.BeginRequest  开始处理请求 2.AuthenticateRequest 授权验证请求,获取用户授权信息 3.PostAuthenticateRequest 获取成功 4.AunthorizeRequest 授权,一般来检查用户是否获得权限 5.PostAuthorizeRequest 获得授权 6.ResolveRequestCache 获取页面缓存结果(如果没有则执行) 7.Po

ASP.NET Core中的依赖注入(5): ServiceProvider实现揭秘 【解读ServiceCallSite 】

通过上一篇的介绍我们应该对实现在ServiceProvider的总体设计有了一个大致的了解,但是我们刻意回避一个重要的话题,即服务实例最终究竟是采用何种方式提供出来的.ServiceProvider最终采用何种方式提供我们所需的服务实例取决于最终选择了怎样的ServiceCallSite,而服务注册是采用的ServiceDescriptor有决定了ServiceCallSite类型的选择.我们将众多不同类型的ServiceCallSite大体分成两组,一组用来创建最终的服务实例,另一类则与生命周

ASP.NET MVC中使用异步控制器

线程池 一直想把项目改写成异步,但是ASP.NETMVC3下写的过于繁琐,.NET 4.5与ASP.NET MVC下代码写起来就比较简单了, MS好像也一直喜欢这样搞,每一个成熟的东西,都要演变好几个版本,才能趋于规范. ASP.NET MVC 中为什么需要使用异步呢,IIS有一个线程池来处理用户的请求,当一个新的请求过来时,将调度池中的线程以处理该请求,然而,但并发量很高的情况下,池中的线程已经不能够满足这么多的请求时候,池中的每一个线程都处于忙的状态则在处理请求时将阻塞处理请求的线程,并且该