引言

由于要在客户那里部署项目,就研究了一下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. Linux下使用ISC DHCP可以实现动态推送静态路由表

    ISC DHCP可以实现动态推送静态路由表,先做个记号. 参考: https://gauvain.pocentek.net/docs/dhcpd-push-routes/ http://www.isc ...

  2. HttpClient post提交数据,汉字转码

    public static String post(String url, String data) throws ClientProtocolException, IOException { Htt ...

  3. java 中文与unicode互转

    public class FontUtil { public static void main(String[] args) { System.out.println(chinaToUnicode(& ...

  4. java代码逆向工程生成uml

    今天在看一个模拟器的源码,一个包里有多个类,一个类里又有多个属性和方法,如果按顺序看下来,不仅不能对整个模拟器的框架形成一个大致的认识,而且只会越看越混乱,所以,想到有没有什么工具可以将这些个类以及它 ...

  5. MNI模板和Talairach 模板的对比

    The MNI brain and the Talairach atlas SPM 96 and later use standard brains from the Montreal Neurolo ...

  6. LaTeX绘图宏包 Pgfplots package

    Pgfplots package The pgfplots package is a powerful tool, based on tikz, dedicated to create scienti ...

  7. vnstat 查看服务器带宽统计命令

    vnStat是一个Linux下的网络流量监控软件,它记录指定网卡每日的传输流量日志. 它并非基于网络包的过滤,而是分析文件系统- /proc, 所以vnStat无需root的权限就可使用. ,它还自带 ...

  8. Node.js:常用工具、路由

    一.常用工具util util 是一个Node.js 核心模块,提供常用函数的集合,用于弥补核心JavaScript 的功能 过于精简的不足. 1.util.inherits util.inherit ...

  9. Cognos如何开启CJAP认证程序日志

    步骤: 1:修改ipfaaaclientconfig.xml.sample为ipfclientconfig.xml,修改<param name="File" value=&q ...

  10. Framework元数据向导错误之BMT-MD-6001与BMT-IMP-0002

    1:错误BMT-MD-6001的两种处理方法 在Framework中创建Project后,运行元数据向导从数据库连接中向物理层导入数据表,报错如下 环境如下:Framework版本:10.2.0,Co ...