使用ASP.NET 4的自动启动特性,解决ASP.NET第一次访问速度慢问题

些web应用在可以处理用户访问之前,需要装载很多的数据,或做一些花费很大的初始化处理。今天使用 ASP.NET 的开发人员经常使用应用的Global.asax 文件中的 “Application_Start”事件处理函数来做这些工作(该事件是在第一个请求执行时触发的)。他们要么设计定制脚本,周期性地向应用发假的请求,来“唤醒它(wake it up)”,从而在客户访问之前执行这个代码,或者就让那不幸的第一个访问者等着这个逻辑执行完才处理其请求(这可以给这些用户造成很长的耽搁)。

ASP.NET 4中有一个叫“自动启动(auto-start)”的新特性,可以较好地解决这个场景, 可以在IIS 7.5(随Windows 7和Windows Server 2008 R2发布)上运行 ASP.NET 4时使用。这个自动启动特性提供了一个可控制的方式来启动一个应用工作进程,初始化ASP.NET 应用,然后接受HTTP请求。

将一个ASP.NET 4应用配置成自动启动

要使用ASP.NET 4自动启动特性,你首先配置IIS应用池工作进程,使在其中运行的应用在web服务器最先装载时即自动启动。配置方法是:

1. 找到网站所在的应用程序池,然后右键打开高级设置

2. 修改启动模式为:AlwaysRunning

如果你运行Windows任务管理器,点击“显示所有用户的进程”复选框,然后上面对话框点确定的话,瞬间就会看到一个新的“w3wp.exe” 工作进程启动起来了。

一个单一IIS应用池工作进程可以宿主多个ASP.NET 应用,你可以通过在网站的高级设置中,设置自动启动为True:

接下来,要设置下网站预加载启动所要执行的逻辑,在IIS里面也就是要添加一个自定义的serviceAutoStartProvider,具体办法如下:

首先,实现继承自IProcessHostPreloadClient的类:

这段代码做的一件事情就是在热启动时让系统自动访问一次网站,让IIS自己来做这个人品不好的人。

在serviceAutoStartProviders节中,打开集合,点击添加,写上名字和类名,这个名字要记住,因为下一步需要填写这个名字.如图:

在sites节点中打开集合,选中我们需要设定的站点,在下面的属性框中打开applicationDefaults节点,将serviceAutoStartEnabled设为true,将上一步增加的serviceAutoStartProvider的Name填写到这里.

到此站点的热启动已经配置完毕.

配置好后可能会遇到的一些问题以及注册事项:

1.在代码中最好将所有的都用try{}catch{}包住,因为如果这里抛出的异常会导致应用程序停止.

2.运行的状态我们可以从事件管理器中进行查看,或是自己在代码中写日志记录运行的状态.

3.这个类中所做的并不会引用站点的启动,不会执行应用程序的生命周期,也就是说不会调用Application_Start以及其它生命周期过程.所以在本例中我们再会NEW一个请求这个站点.

更多.net开发资讯请关注近乎/Spacebuilder开发分享社区》》

时间: 2024-10-17 20:03:24

使用ASP.NET 4的自动启动特性,解决ASP.NET第一次访问速度慢问题的相关文章

ASP.NET 预编译命令(解决发布后第一次访问慢问题)

ASP.NET 编译工具 (Aspnet_compiler.exe) 官方说明 新建bat文件 @echo off   CD /d C:\Windows\Microsoft.NET\Framework\v2.0.50727   aspnet_compiler -p E:\wwwroot\站点主目录 -v /   echo 命令执行成功!   pause 请注意,上面的v2.0.50727代表项目的.NET版本,可根据项目版本替换成以下版本 v2.0.50727 v3.0 v3.5 v4.0.30

解决Sharepoint每天第一次打开速度慢的问题

每天第一次打开Sharepoint的网站会非常慢,下面是解决这个问题的几个方法. 添加crl.microsoft.com到Hosts文件,IP地址指向服务器本机. 允许服务器直接连接到crl.microsoft.com. 修改服务器注册表.禁止所有用户使用CRL检查,具体修改如下. 注册表地址: [HKEY_USERS/<userid>/Software/Microsoft/Windows/CurrentVersion/WinTrust/Trust Providers/Software Pub

解决iis+php+mysql访问速度慢的方法

IIS7.5网站访问PHP响应慢的原因原因是PHP5.3以上支持IPv6协议,但是大家的服务器未使用IPv6,当访问PHP的时候会连接MySQL的地址为localhost,系统会会先用IPv6连接,但又没有IPv6所以要等到IPv6失败了再转到IPv4这样绕了一圈速度当然慢了.网上说的神马禁用IPv6试了没有任何作用,然后使用了微软官方的IPv6禁用工具依然如此,下面贴出正确的解决方法我的方法不一定适用你但你不妨一试因为我在服务器使用ping localhost的时候感觉很奇怪出来的IP居然是[

ASP.NET5和MVC6新特性学习

ASP.NET5和MVC6新特性学习 ? ? ASP.NET5和MVC6的新特性 在新版ASP.NET5和MVC6中,有很多变化,有些是彻底的变化,比如在最底层支持依赖注入技术,为了方便了解,我们这里列出了最重要的10大变化,以便进行学习,具体如下: ASP.NET 5现在已经是跨平台了,可以在Mac和Linux上运行. 不再有Web Forms框架了. 只支持C#,不在支持VB.NET了.(貌似最近又听说最终版VB.NET又要支持了) 新的Tag语法,@Html.LabelFor或Html.T

ASP.NET MVC5(一):ASP.NET MVC概览

ASP.NET MVC概览 ASP.NET MVC是一种构建Web应用程序的框架,它将一般的MVC(Model-View-Controller)模式应用于ASP.NET框架. ASP.NET MVC模式简介 MVC将Web应用程序划分为三个主要的部分,以下是MSDN给出的定义: 模型(Model):模型对象是实现应用程序数据域逻辑的应用程序部件. 通常,模型对象会检索模型状态并将其存储在数据库中. 例如,Product 对象可能会从数据库中检索信息,操作该信息,然后将更新的信息写回到 SQL S

ASP.NET MVC基于标注特性的Model验证:将ValidationAttribute应用到参数上

原文:ASP.NET MVC基于标注特性的Model验证:将ValidationAttribute应用到参数上 ASP.NET MVC默认采用基于标准特性的Model验证机制,但是只有应用在Model类型及其属性上的ValidationAttribute才有效.如果我们能够将ValidationAttribute特性直接应用到参数上,我们不但可以实现简单类型(比如int.double等)数据的Model验证,还能够实现“一个Model类型,多种验证规则”,本篇文章将为你提供相关的解决方案(源代码

ASP.NET MVC基于标注特性的Model验证:一个Model,多种验证规则

原文:ASP.NET MVC基于标注特性的Model验证:一个Model,多种验证规则 对于Model验证,理想的设计应该是场景驱动的,而不是Model(类型)驱动的,也就是对于同一个Model对象,在不同的使用场景中可能具有不同的验证规则.举个简单的例子,对于一个表示应聘者的数据对象来说,针对应聘的岗位不同,肯定对应聘者的年龄.性别.专业技能等方面有不同的要求.但是ASP.NET MVC的Model验证确是Model驱动的,因为验证规则以验证特性的形式应用到Model类型及其属性上.这样的验证

解决asp.net中“从客户端中检测到有潜在危险的Request.Form值”的问题

在提交表单时候,asp.net 提示:"从客户端(......)中检测到有潜在危险的 Request.Form 值" .asp.net中的请求验证特性提供了某一等级的保护措施防止XSS攻击,asp.net的请求验证是默认启动的.这个给出各个版本.net的解决方法.asp.net 2.0 通常解决办法方案一:将.aspx文件中的page项添加ValidateRequest="false" ,如下:<%@ Page ValidateRequest="fa

解决ASP.NET 自定义报表部署到IIS浏览时出现ASP.NET会话已结束问题

进到公司开始接触的项目就要做报表,原系统使用的是水晶报表,但是水晶报表展示方面美观方面不怎么好需客户需要美化一下.自定义报表与水晶报表之前都没有接触过,自己先学了一下这两种报表,后面觉得自定义报表设计比较灵活所以就选择了自定义报表.当开发完成后自己在开始环境下浏览测试都没有出现过ASP.NET会话已过期的问题,可是当部署到IIS测试人员进行测试时出如图情况: 自己接触IIS不多,并且在开发环境下测试都没有问题联署到IIS就有问题当时就觉得有点头大,于是上网找了下资料但是这方面的资料并不多并且很多