引言

由于要在客户那里部署项目,就研究了一下IIS中的集成和经典模式,这里做一些笔记。希望对您有所帮助。

IIS7.0和IIS6.0

IIS7.0的web应用程序有两种配置模式:经典模式和集成模式。经典模式是为了与之前的版本兼容,使用ISAPI扩展来调用ASP.NET运行库,原先运行在IIS6.0下的web应用程序迁移到IIS7.0中只要将应用程序配置成经典模式,代码基本不用修改就可以正常运行。集成模式是一种同意的请求处理管道,它将ASP.NET请求管道与IIS核心管道组合在一起,这种模式能够提供更好的性能,能够实现配置和管理的模块化,而且增加了使用托管代码扩展IIS时的灵活性。如果老的web应用程序运行于IIS7.0的集成模式下,可能需要对应用程序的web.config文件进行修改,尤其是使用了实现IHttpHandler接口的自定义模块的情况。IIS7.0在同一个服务器上能够同事支持两种模式的应用程序。

IIS6.0中ASP.NET MMC管理单元用于配置ASP.NET,7.0中ASP.NET应用程序的管理域IIS管理更加紧密的集成在一起,不管在单独的管理单元,所有的IIS和ASP.NET配置都是使用IIS管理器完成的。IIS7.0配置信息基于.NET Framework配置系统,所以IIS7.0中运行的应用程序的web.config文件同时包含web服务器和ASP.NET配置设置,例如可以在web.config文件中设置扩展名和文件的映射(IIS6.0中必须在IIS中进行配置)。

Web.config文件的变化

System.webServer节指定了应用于web应用程序的IIS7.0设置,其父节点是configuration,该节点中可以设置的内容包括:

l  当请求为包含指定资源时,web服务器返回给客户端的默认文档(defaultDocument);

l  响应的压缩设置(httpCompression)

l  自定义头部(httpProtocol节的customHeaders)

l  模块(modules)

l  处理程序(handlers)

其中的一些设置仅适用于集成模式,而不适用于经典模式,如经典模式下运行的应用程序则忽略web.config的system.webServer节中指定的所有托管代码模块和处理程序,这种模式下web应用程序应该在system.webserver节的httpModules和httpHandlers中定义模块和处理程序。

将web应用程序迁移到集成模式

不包含自定义模块或处理程序的web应用程序通常无需更改即可在IIS7.0集成模式下正常工作。对于依赖于自定义模块或处理程序的web应用程序,需要执行以下步骤来使其能够在集成模式下运行:

l  使用本主题稍后的将  Web Config  文件迁移到集成模式部分中描述的方法之一,在Web.config 文件的  system.webServer  节中注册自定义模块和处理程序。

l  仅在自定义模块的  Init  方法中定义  HttpApplication  请求管道事件(如  BeginRequest  和EndRequest)的事件处理程序。

l  请确保您已解决  Upgrading ASP.NET Applications to IIS 7.0: Differences between IIS 7.0

Integrated Mode and Classic mode(将  ASP.NET  应用程序升级到  IIS 7.0:IIS 7.0  集成模式和经典模式之间的区别)的“Known Differences Between Integrated Mode and Classic Mode”(集成模式和经典模式之间的已知区别)部分中讨论的问题。

实现  IHttpModule  接口的模块被称为托管代码模块,因为它们是使用  .NET Framework 生成的。可以在服务器级别或应用程序级别注册托管代码模块。本机代码模块是仅在服务器级别注册的  DLL(非托管代码)。在集成模式下,将以托管模块的形式实现核心ASP.NET  功能,例如会话状态和  Forms  身份验证。

在将应用程序从经典模式迁移到集成模式时,可以保留经典模式下的自定义模块和处理程序注册,也可以将这些注册移除。如果不移除经典模式下使用的  httpModules  和  httpHandlers  注册,则必须将  validation  元素的  validateIntegratedModeConfiguration  属性设置为  false  以避免错误。validation  元素是  system.webServer  元素的子元素。有关更多信息,请参见  ASP.NET Integration with IIS 7.0 (将  ASP.NET  与  IIS 7.0  集成)中的“Disabling the migration message”(禁用迁移消息)部分。

迁移  Web.config  文件以便在集成模式下使用

如果模块或处理程序是在应用程序级别定义的,则不会自动调用该模块或处理程序。这涉及

符合以下条件的模块或处理程序:在  Bin  文件夹下的程序集中定义;在  App_Code  文件夹下作为源代码定义;没有在  Web.config  文件的  system.webServer  节中注册和定义。为了使模块或处理程序能够参与集成模式请求管道,必须使用下列方法之一注册该模块或处理程序:

l   直接编辑  Web.config  文件,并且将  modules  或  handlers  元素添加到  system.webServer  元素中。请注意,与经典模式相比,元素名称是不同的:modules  和  handlers  分别对应于经典模式下的httpModules  和  httpHandlers。

l   使用  IIS  管理器配置模块或处理程序。有关更多信息,请参见  Configuring Handler Mappings in IIS 7.0 (在  IIS 7.0  中配置处理程序映射)和  Configuring Modules in IIS 7.0 (在  IIS 7.0  中配置模块)。

l   使用  IIS 7.0  命令行工具  (Appcmd.exe)。有关更多信息,请参见  Configure Settings for a Site, Application, Virtual Directory or URL by Using Appcmd.exe(使用  Appcmd.exe  配置站点、应用程序、虚拟目录或  URL  的设置)。

使用集成模式的类和属性

在  IIS 7.0  集成模式以及  .NET Framework 3.0  版或更高版本中使用应用程序时,可以使

用下面这些在经典模式下不可用的类和成员:

l  HttpResponse  对象的  SubStatusCode  属性,使用它可以设置在配置了失败请求跟踪的情况下有用的代码。有关更多信息,请参见  Troubleshooting Failed Requests Using Failed Request Tracing in IIS 7.0(使用  IIS 7.0  中的跟踪功能解决请求失败的问题)。

l   HttpResponse  对象的  Headers  属性,使用它可以访问响应头。

l  HttpContext  对象的  IsPostNotification  和  CurrentNotification  属性,在提供  HttpApplication 事件的处理程序时可以使用它们。

l  HttpRequest  对象的  Headers  和  ServerVariables  属性,它们支持写功能。

[Asp.net]IIS经典和继承模式的更多相关文章

  1. IIS经典模式与集成模式

    在IIS7.0中Web应用程序有两种配置形式:经典和集成 经典模式 经典模式是为了与之前的版本兼容,使用ISAPI扩展来调用ASP.NET运行库,原先运行于IIS6.0下的Web应用程序迁移到IIS7 ...

  2. iis 经典模式和集成模式

    IIS7.0中的Web应用程序有两种配置模式:经典模式和集成模式.两者区别大家可以参考下,根据实际情况选用.  经典模式是为了与之前的版本兼容,使用ISAPI扩展来调用ASP.NET运行库,原先运行于 ...

  3. ASP.Net的两种开发模式

    一.ASP.Net的两种开发模式 1.1 ASP.Net WebForm的开发模式 (1)处理流程 在传统的WebForm模式下,我们请求一个例如http://www.aspnetmvc.com/bl ...

  4. js类式继承模式学习心得

    最近在学习<JavaScript模式>,感觉里面的5种继承模式写的很好,值得和大家分享. 类式继承模式#1--原型继承 方法 让子函数的原型来继承父函数实例出来的对象 <script ...

  5. JavaScript 对象的创建和对6种继承模式的理解和遐想

      JS中总共有六种继承模式,包括原型链.借用构造函数.组合继承.原型式继承寄生式继承和寄生组合式继承.为了便于理解记忆,我遐想了一个过程,对6中模式进行了简单的阐述. 很长的一个故事,姑且起个名字叫 ...

  6. JavaScript中的继承模式总结

    一.总结: //js中的几种继承 //原型链的问题,包含引用类型的原型属性会被实例共享,子类型无法给超类型传递参数 function SuperType() { this.colors = [&quo ...

  7. asp.net简述Web Forms开发模式

    详情请查阅:http://www.runoob.com/aspnet/aspnet-intro.html 1.Web Forms 是三种创建 ASP.NET 网站和 Web 应用程序的编程模式中的一种 ...

  8. JavaScript中的继承模式总结(九)

    一.总结: //js中的几种继承 //原型链的问题,包含引用类型的原型属性会被实例共享,子类型无法给超类型传递参数 function SuperType() { this.colors = [&quo ...

  9. JS继承模式粗探

    之前提到了JS中比较简单的设计模式,在各种设计模式中被最常使用的工具之一就是原型链的继承.作为OOP的特质之一——继承,今天主要谈谈JS中比较简单的继承方法. 最基础的原型链继承在这里就不复述了,主要 ...

随机推荐

  1. PostgreSQL与MySQL的区别收集(转)

    特性 MySQL PostgreSQL 实例 通过执行 MySQL 命令(mysqld)启动实例.一个实例可以管理一个或多个数据库.一台服务器可以运行多个 mysqld 实例.一个实例管理器可以监视 ...

  2. Linux网络设置1——Linux网络环境配置

    方法一: ① 利用root登陆,输入setup命令 ② 选择Network configuration,进入Configure TCP/IP界面 ③ 第一个[],若光标在此,按空格出现*号,则自动分配 ...

  3. 'NSUnknownKeyException', reason:....etValue:forUndefinedKey:]: this class is not key value coding-compliant for the key

    erminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<MainTableViewControl ...

  4. LT1072 -- Wide-range voltage regulator automatically selects operating mode

    The circuit in Figure 1 delivers programming voltages to an EEPROM under the control of an external ...

  5. MySQL5.6新特性之GTID、多线程复制 - 不知为何

    http://www.tuicool.com/articles/yi2aui http://www.cnblogs.com/cenalulu/category/380263.html

  6. HDUJ 1392 Surround the Trees 凸包

    Surround the Trees Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  7. crtmpserver 在VS2010下的build

    Make sure that you have administrative privileges before doing the following steps.​1. 下载并安装(Microso ...

  8. Mysql 会导致锁表的语法

    最近再找一些Mysql锁表原因,整理出来一部分sql语句会锁表的,方便查阅,整理的不是很全,都是工作中碰到的,会持续更新 笔者能力有限,如果有不正确的,或者不到位的地方,还请大家指出来,方便你我,方便 ...

  9. s:iterator循环输出数字

    1.在action里加上maxNum属性,GET SET方法2.第一种写法(推荐) <s:iterator value="new int[maxNum]" status=&q ...

  10. web.xml加载顺序 [转载]

    一 1.启动一个WEB项目的时候,WEB容器会去读取它的配置文件web.xml,读取<listener>和<context-param>两个结点. 2.紧急着,容创建一个Ser ...