原文

代码 或者点

通过IIS 8.0应用初始化特性管理员可以配置IIS为一个网站或多个网站提前执行初始化任务。当应用在初始化期间,可以通过配置先返回一个静态页面知道应用的初始化任务完成。

通过配置一系列的全局级和应用级规则可以控制如何/何时初始化网站应用。

指南

事前准备

首先需要安装IIS 8.0。另外,应用初始化特性是作为IIS的"Application Development"子特性提供的,也需要安装。

下面的截图来自于Windows Server 2012 Server Manager UI,展示了如何安装Application Initialization特性

全局应用初始化

可以在两个地方配置应用初始化特性:全局级别的applicationHost.config文件,和应用级别的web.config文件。

In this walkthrough, you will configure a sample application to always be initialized when the application pool associated with the application starts up. Since application pool behaviors can only be configured in applicationHost.config, running application initialization whenever an application pool starts up is considered part of the "global" application initialization settings.

修改applicationHost.config

用记事本打开%WINDIR%\system32\inetsrv\config文件夹中的applicationHost.config文件。

找到配置块,找到名为".NET v4.5"的应用池记录。

修改这个应用池记录让这个应用池是always running的状态。

<add name=".NET v4.5" startMode="AlwaysRunning" managedRuntimeVersion="v4.0" />

往下找到配置元素。在配置元素中有一个

<application path="/appinit" preloadEnabled="true" applicationPool=".NET v4.5">

设置preloadEnable为true tells IIS 8.0 that it sends a "fake" request to the application when the associated application pool starts up. That is why in the previous step we set the application pool's startMode to "AlwaysRunning".

With the combination of the application pool always running, and the application itself being marked to always receive a fake request, whenever the machine restarts and/or the World Wide Web service is recycled, IIS 8.0 ensures that the application pool instance is running and that the application "/appinit" is always sent a fake request to trigger the application to start up.

修改web.config

用记事本打开位于网站所在目录C:\inetpub\wwwroot\appinit中的web.config。

web.config已经设置好了一些section,但是被注释了,先取消<system.webServer>中的注释。

<applicationInitialization
remapManagedRequestsTo="Startup.htm"
skipManagedModules="true" >
<add initializationPage="/default.aspx" />
</applicationInitialization>

这个配置告诉IIS在初始化完成前,返回Startup.html页面给所有请求者。

运行应用

net stop w3svc & net start w3svc

用浏览器打开http://localhost/appinit/default.aspx

浏览器先是显示“Startup.htm”这个页面,一旦应用初始化完成,便会返回真正的请求页面。

配置overlapped进程回收

IIS 8.0通过在一个后台overlapped进程中执行应用初始化集成了应用初始化和overplapped进程回收。当IIS检查到一个活动的工作进程在被回收的时候,不会马上转到新的工作进程中,而是等新的进程完成了初始化工作后才转到这个新的进程。这样保证了当应用已经在运行的时候不会再次看到“Startup.html”页面。

打开applicationHost.config文件。修改如下:

<add name=".NET v4.5"
startMode="AlwaysRunning"
managedRuntimeVersion="v4.0" >
<recycling logEventOnRecycle="Schedule">
<periodicRestart requests="30" />
</recycling>
</add>

元素告诉IIS每30个HTTP请求回收进程。

运行应用

net stop w3svc & net start w3svc

用浏览器打开http://localhost/appinit/default.aspx

“Startup.htm”展现出来了

打开任务管理器。按照进程名排序,可以看到有一个w3wp.exe线程,状态为Running。这个就是在运行"appinit"应用的进程。

不断刷新浏览器直到出现了真正的default.aspx页面。

现在再次刷新页面30次以上,导致IIS回收应用池。现在停止刷新,回到任务管理器,可以看到出现了第二个w3wp.exe进程:



上面的截图告诉我们当进程开始回收的时候第二个w3wp.exe开始了。

再次刷新浏览器,我们看到的依然是default.aspx页面。即使应用初始化正在这个新的w3wp.exe实例中进行。

URL Rewrite与应用初始化

[译]IIS 8.0应用初始化的更多相关文章

  1. ASP.NET的运行原理与运行机制 如何:为 IIS 7.0 配置 <system.webServer> 节

    https://technet.microsoft.com/zh-cn/sysinternals/bb763179.aspx 当一个HTTP请求到服务器并被IIS接收到之后,IIS首先通过客户端请求的 ...

  2. IIS 7.0 的 ASP.NET 应用程序生命周期概述(转载)

    IIS 7.0 的 ASP.NET 应用程序生命周期概述更新:2007 年 11 月本主题介绍在 IIS 7.0 集成模式下运行以及与 IIS 7.0 或更高版本一起运行的 ASP.NET 应用程序的 ...

  3. IIS 5.0 和 6.0 的 ASP.NET 应用程序生命周期概述

    本主题概述 ASP.NET 应用程序的生命周期,列出了重要的生命周期事件,并描述了您编写的代码将如何适应于应用程序生命周期.本主题中的信息适用于 IIS 5.0 和 IIS 6.0.有关 IIS 7. ...

  4. Intelligencia.UrlRewriter在IIS 7.0下的完全配置攻略

    在项目中,之前公司是使用IIS 7.0官方的URL重写模块,官方的使用说明请参见官方URLRewrite  ,添加伪静态支持,后来经理问我有没有涉及伪静态,我说之前项目中我一直是用Intelligen ...

  5. 在Windows 2008/2008 R2 上配置IIS 7.0/7.5 故障转移集群

    本文主要是从:http://support.microsoft.com/kb/970759/zh-cn,直接转载,稍作修改裁剪而来,其中红色粗体部分,是我特别要说明的 若要配置 IIS 7.0 和 7 ...

  6. IIS 7.0 下 httpMoudle 失效的问题

    在web.config里配置了: <system.web> <httpModules>  <add type="DevExpress.Web.ASPxClass ...

  7. ASP.NET MVC3 系列教程 - 部署你的WEB应用到IIS 6.0

    I:ASP.NET MVC3 部署的前期工作 1.确认部署的服务器操作系统环境 首先我们确认服务器的操作系统版本 可以从系统命令行工具里输入: systeminfo 获取相关操作系统信息例如 然后再确 ...

  8. IIS 7.0 and Web Farms

    1. IIS 6 IIS 6.0 was capable of scaling out to virtually any number of web servers and had tools lik ...

  9. 使用IIS 7.0 Smooth Streaming 优化视频服务

    http://www.cnblogs.com/dudu/archive/2013/06/08/iis_webserver_settings.html (支持高并发的IIS Web服务器常用设置) ht ...

随机推荐

  1. PHP语法(二):数据类型、运算符和函数

    相关链接: PHP语法(一):基础和变量 PHP语法(二):数据类型.运算符和函数 PHP语法(三):控制结构(For循环/If/Switch/While) 这次整理了PHP的数据类型.运算符和函数. ...

  2. Spring, MyBatis 多数据源的配置和管理

    同一个项目有时会涉及到多个数据库,也就是多数据源.多数据源又可以分为两种情况: 1)两个或多个数据库没有相关性,各自独立,其实这种可以作为两个项目来开发.比如在游戏开发中一个数据库是平台数据库,其它还 ...

  3. Docker中部署Kubernetes

    Kubernetes为Google开源的容器管理框架,提供了Docker容器的夸主机.集群管理.容器部署.高可用.弹性伸缩等一系列功能:Kubernetes的设计目标包括使容器集群任意时刻都处于用户期 ...

  4. Windows下磁盘分配操作

    问题概述:在装系统的时候有时候并不能一下分出完全符合我们使用习惯的分区大小,我们可能需要在后期调整分区大小.以下是有关分区大小调整的操作. 使用工具:Windows磁盘管理工具. 操作步骤: 1.使用 ...

  5. WPF 自定义IconButton

    自定义一个按钮控件 按钮控件很简单,我们在项目中有时把样式封装起来,添加依赖属性,也是为了统一. 这里举例,单纯的图标控件怎么设置 1.UserControl界面样式 <UserControl ...

  6. 在IT择善培训机构的培训心得

    人的一生中都是不断学习来提高 自己,俗话说:“知识是人类不断进步的阶梯”也是“飞向天空的翅膀”.       本人因工作的加入了择善进行学习,能成为择善的学员,不知不觉来到择善1个多月,回想起这1个多 ...

  7. Leetcode, construct binary tree from inorder and post order traversal

    Sept. 13, 2015 Spent more than a few hours to work on the leetcode problem, and my favorite blogs ab ...

  8. 浅谈 C++ 中的 new/delete 和 new[]/delete[]

    在 C++ 中,你也许经常使用 new 和 delete 来动态申请和释放内存,但你可曾想过以下问题呢? new 和 delete 是函数吗? new [] 和 delete [] 又是什么?什么时候 ...

  9. 【转】在CentOS6.5安装 svn1.8 (亲测可用)

    from :  http://tecadmin.net/install-subversion-1-8-on-centos-rhel/ How to Install Subversion (SVN) 1 ...

  10. [LeetCode] Decode Ways 解码方法

    A message containing letters from A-Z is being encoded to numbers using the following mapping: 'A' - ...