Preloading Your ASP.NET Applications
You may have noticed that the first request to an ASP.NET Web site takes longer than subsequent requests as worker threads are started, database connections opened and cached data loaded. One of my clients implemented a two-step process to eliminate this problem. First, they put code in a page on the site that would perform a bunch of initialization activities (primarily, load the Cache object with data). Second, they assigned some low-ranking person (often an intern) to request that page from the site. To ensure that the data is loaded before the first "real" user makes a request, the intern comes in very early in the morning to trigger the processing.
IIS 7.5 now has (in beta) an option to trigger code to run automatically whenever your Web site is started and before any requests are received -- just what my clients need. The good news is that this option works with any version of ASP.NET beginning with version 2.0. Because the feature is tied to IIS 7.5, you must be using Windows 7 or Windows Server 2008 R2 as your server.
If you want to start experimenting with the tool, first download the warmup module from http://www.iis.net/expand/applicationwarmup and install it on your server. There are two ways to configure this option: with IIS Manager or by making changes in configuration files.
Configuring with IIS Manager
In IIS Manager, drill down to the Web site you want to autostart and
double-click the Application Warm-up option in the panel in the middle
of IIS manager. This will display an empty list of URLs. In the right
hand "Actions" panel, click the Settings choice. That will display a
settings dialog where you must check both the "Enable Application
Warm-up" and the "Start Application Pool..." to enable autostart for the
application pool for your Web site.
Now click on Add Request in the right-hand Actions column. In the
resulting dialog, in the top textbox, enter the URL for a page on your
site that will execute the preloading code. All requests return a result
code so you need to indicate what result codes are acceptable in the
second textbox (in most cases, you can just leave the default setting of
200-399 in place).
You can also specify parameters to pass as part of the request and
whether the request is to made asynchronously (which can result in
multiple startup requests being made to the site at once) or
synchronously (where no request will be processed until the previous one
completes). For sites that won't accept requests without a username and
password (e.g. SharePoint sites), you can provide a user context.
Configuring with Config Files
You can also enable autostart with change in IIS 7.0's
applicationHost.config file (you should find the file in
C:\Windows\System32\inetsrv\config folder). To enable autostart for the
application pool, in the applicationPools element find the <add>
element for your site's application pool and add a startMode attribute,
setting it to "AlwaysRunning":
<applicationPools>
<add name="PHVISSite" startMode="AlwaysRunning" />
Now, in the applicationHost.config you must add a location element pointing to your site inside the file's configuration element. Doing this enables autostart for the site itself. Inside the location element's system.webserver element, use the httpWarmupGlobalSettings element to enable Warmup for the site:
<location path="PHVISSite">
<system.webServer>
<httpWarmupGlobalSettings httpWarmupEnabled="true" />
</system.webServer>
</location>
Now that you've enabled autostart for both your application pool and your Web site, you need to specify what page to request. You do that in the application's web.config file by adding an httpWarmup element containing a requests element. Within the requests element you use add elements to specify the page to request, the acceptable result codes, whether requests are to be processed synchronously or asynchronously, and a username/password combination. Here's an example:
<httpWarmup>
<requests>
<add requestUrl="PHVISSite/Default.aspx"
allowedResponseCodes="200-399" warmupContext=""
sendMode="Asynchronous" />
</requests>
</httpWarmup>
While I've been using the term "startup", the official term is "warmup," which better describes the process when the site's application pool is recycled rather than shut down and restarted. During a recycle, the old processing threads are kept running until the threads started by this warmup signal that they're done. Only then are the old threads wound down and new requests routed to the new threads -- you get a preloaded site with no interruption of service.
And, more importantly, your intern can sleep in! Actually, since you don't need him anymore, you can just let him go.
About the Author
Peter Vogel is a system architect and principal in PH&V Information Services. PH&V provides full-stack consulting from UX design through object modeling to database design. Peter tweets about his VSM columns with the hashtag #vogelarticles. His blog posts on user experience design can be found at http://blog.learningtree.com/tag/ui/.
Preloading Your ASP.NET Applications的更多相关文章
- [转]Publishing and Running ASP.NET Core Applications with IIS
本文转自:https://weblog.west-wind.com/posts/2016/Jun/06/Publishing-and-Running-ASPNET-Core-Applications- ...
- ASP.NET中常用的优化性能的方法
1. 数据库访问性能优化 数据库的连接和关闭 访问数据库资源需要创建连接.打开连接和关闭连接几个操作.这些过程需要多次与数据库交换信息以通过身份验证,比较耗费服务器资源.ASP.NET中提供了连接池( ...
- 保护ASP.NET 应用免受 CSRF 攻击
CSRF是什么? CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/ ...
- VS2013中web项目中自动生成的ASP.NET Identity代码思考
vs2013没有再分webform.mvc.api项目,使用vs2013创建一个web项目模板选MVC,身份验证选个人用户账户.项目会生成ASP.NET Identity的一些代码.这些代码主要在Ac ...
- 爱与恨的抉择:ASP.NET 5+EntityFramework 7
EF7 的纠缠 ASP.NET 5 的无助 忘不了你的好 一开始列出的这个博文大纲,让我想到了很久之前的一篇博文:恋爱虽易,相处不易:当EntityFramework爱上AutoMapper,只不过这 ...
- ASP.NET 状态服务 及 session丢失问题解决方案总结
ASP.NET2.0系统时,在程序中做删除或创建文件操作时,出现session丢失问题.采用了如下方法:1.asp.net Session的实现:asp.net的Session是基于HttpModul ...
- ASP.NET Misconfiguration: Missing Error Handling
Abstract: An ASP .NET application must enable custom error pages in order to prevent attackers from ...
- ASP.NET Misconfiguration: Request Validation Disabled
Abstract: Use the ASP.NET validation framework to prevent vulnerabilities that result from unchecked ...
- ASP.NET Misconfiguration: Debug Information
Abstract: Debugging messages help attackers learn about the system and plan a form of attack. Explan ...
随机推荐
- Python多进程并发(multiprocessing)
1.新建单一进程 如果我们新建少量进程,可以如下: 2.使用进程池 是的,你没有看错,不是线程池.它可以让你跑满多核CPU,而且使用方法非常简单. 注意要用apply_async,如果落下async, ...
- Python heapq模块
注意,默认的heap是一个小顶堆! heapq模块提供了如下几个函数: heapq.heappush(heap, item) 把item添加到heap中(heap是一个列表) heapq.heappo ...
- 20175120彭宇辰 《Java程序设计》第八周学习总结
教材学习内容总结 第十五章 泛型与集合框架 一.泛型 泛型的主要目的是可以建立具有类型安全的集合框架,如链表.散列映射等数据结构. 1.泛型类声明 class People<E> Peop ...
- Vue原理--虚拟DOM
为什么需要虚拟DOM? 如果对前端工作进行抽象的话,主要就是维护状态和更新视图,而更新视图和维护状态都需要DOM操作.其实近年来,前端的框架主要发展方向就是解放DOM操作的复杂性. 运行js的速度是很 ...
- 获取spring容器对象方法和原因
为什么要获取Spring容器对象:拿到spring容器对象后,你就可以用spring管理的bean了,拿到bean,自然可以使用bean的方法,场景:比如jsp页面.通过注解是无法注入bean的,在开 ...
- gcc and g++ 常用参数解释
程序编译运行的过程 预处理.处理一些#include,#define命令,生成.i或者.ii文件: 编译.编译器进行语法分析,语义分析,中间代码生成,目标代码生成,优化,生成.s文件 汇编.汇编器把汇 ...
- Thing in java 第四章,控制执行流程,练习题答案
/** * Created by Sandy.Liu on 2018/7/19. * Thinking in java, version 4, chapter 4, practice 1 * Writ ...
- 如何编译luabind支持vs2010之后所有版本
步骤 下载https://github.com/luabind/luabind/tree/0.9. 其最后一次commit为 Revision: 8c66030818f0eacbb7356c16776 ...
- 为什么选择Go语言 GO语言都能做什么产品
Go语言,又称Golang,是Google开发的一款静态强类型.编译型.并发型,并具有垃圾回收机制的编程语言,它的运行速度非常之快,同时还有如下特性:具有一流的标准库.无继承关系.支持多核:同时它还有 ...
- django ORM多对多操作
创建多对多: 方式一:自定义关系表 class Host(models.Model): nid = models.AutoField(primary_key=True) hostname = mode ...