简述
1、iis的定义
iis是internet information server的缩写,它是微软公司主推的web服务器,现在用户一般常用的版本是windows 2003里面包含的iis 6或者是更早的iis 5,最新版本为iis 7.0。
2、目前支持iis7.0的软件现状
目前大部分软件是以兼容性的角度来支持iis7.0,其实只是iis7.0模拟iis6.0的运行模式,并没有完全发挥出iis7.0的优势。
3、动易软件产品支持iis7.0的特点
动易核心产品研发部门为了不断提升系统性能,积极跟踪微软最新技术,对产品各方面的运行环境支持进行了认真的研究,发挥系统环境的改善对应用程序的提升,所以我们进一步完善了产品对iis7.0集成模式的支持,发挥iis 7.0所有新特性,如模块化后减少通过httpmodule的次数提高性能、通过文本文件配置iis、安全方面的增强等等。
动易系统产品对iis 7的支持
asp.net 2.0和iis 7发生不兼容变化
iis7的主要部分已被重新编写,重写的大部分都涉及到新的集成模式,该模式允许.net模组可以在iis管道的任何阶段挂接进来。然而,当我们让asp.net运行于这一集成模式时,就会曝露出一些无法兼容的改变。
传统的http module和handler必须在web.config文件中重新进行配置;
不再支持beginrequest和authenticaterequest阶段中的身份模拟(impersonation);
应用再也不能同时使用form和windows身份证验;
非标准http客户端在使用windows身份验证时可能会遇到问题,因为身份验证的功能已移至内核中;
其它在某些特定时刻引发的认证问题,如当客户端正在进行身份模拟时;
不再支持全局事件方法defaultauthentication_onauthenticate,事件windowsauthentication_onauthenticate也不再是每次都会被触发;
passport验证已被彻底标识为过期,与以前所有的不兼容变化所不同的是,这一功能将彻底失效,即使以传统模式运行iis,passport也不再有效。
web.config的配置情况改变
根据iis 7的新情况,兼容iis6等,对web.config进行了重新配置,主要是对http module和handler 进行了重新调整。
![](/uploads/image/uhm20101/201001291628571046.png)
![](/uploads/image/uhm20101/201001291628571046.png)
web.config 文件中的 system.webserver 节用于指定适用于 web 应用程序的 iis 7 设置。同时还保留了原httpmodule的配置,使其同时对更低版本的iis的支持。
对httpmodule重写和调整
由于iis7对http module作了很大调整,使很多以往支持的方法事件在iis7集成模式中不再支持,集成模式下运行的优势可参见附录中的集成模式与经典模式的比较。
如:
不再支持beginrequest和authenticaterequest阶段中的身份模拟
在application_start里使用不再支持request。
为了适应iis7的这些变化,动易系列产品对httpmodule进行重写,以使其适应iis7集成模式。
例如:
在应用程序运行时更新系统虚似目录,这项工作是放在application_start 中进行,而application_start中却不再支持 request.applicationpath。如果把这项目工作放到application_beginrequest中,这将会浪费很多性能。为了解决这个问题,我们把取得虚似目录的方法更改为更加通用的httpruntime.appdomainappvirtualpath。这样,问题得以解决。
iis 7 完全整合 .net 之后,这些 asp.net 模块不只能处理 asp.net 网页程序,也能处理其他如 asp 程序、php 程序或静态 html 网页,也因为 asp.net 的诸多功能已经成为 iis 7 的一部份,因此 asp 程序、php 程序或静态 html 网页等类型的要求,也能使用像是forms认证(forms authentication)或输出缓存(output cache)等。因此,默认情况下http module需要处理更多没有必须的工作。如css、jpg、gif、html等某些不需要httpmodule检查的请求会浪费系统很多没有必要的性能。为了解决这个问题,我们对httpmodule模块化和可配置等改进。重新合理调整httpmodule的功能模块,使其各施其职。httpmodule的可配置化,可以随时根据不同的需求进行调进。
大家可以在config/ pagemodule.config 下看到:
![](/uploads/image/uhm20101/201001291628572405.png)
图: httpmodule配置文件
经过上面的调整和优化,使系统在iis7集成模式下更能发挥iis7的特性。
未来针对iis7的开发
iis 7 允许自行以 asp.net api 开发并加入模块,因此 asp.net 网页开发人员将更容易扩充 iis 7 和网站应用程序的功能,甚至能自行以 .net 编写管理 iis 7 的程序(例如以程序控制 iis 7 以建立网站或虚拟目录)。
出于这种种特性,未来动易产品有将针对iis7 开发更加完善,功能强大的网站管理系统,如站群,子域名等多站点管理系统等。敬请密切期待…
附:iis7介绍
internet information services(iis,互联网信息服务),是由微软公司提供的基于运行microsoft windows的互联网基本服务。常用的版本是windows 2003里面包含的iis 6或者是更早的iis 5,它与windows nt server完全集成,允许使用windows nt server内置的安全性以及ntfs文件系统建立强大灵活的internet/intranet站点。iis支持isapi,使用isapi可以扩展服务器功能, iis的设计目的是建立一套集成的服务器服务,用以支持http、ftp和smtp,它能够提供快速且集成了现有产品,同时可扩展的internet服务器。
新的iis 7.0中加入了更多的安全方面的设计,用户现在可以通过微软的.net语言来运行服务器端的应用程序。除此之外,通过iis7新的特性来创建模块将会减少代码在系统中的运行次数,将遭受黑客脚本攻击的可能性降至最低。下面就让我们一起简单看看iis7中五个最为核心的增强特性:
完全模块化iis
如果你非常熟悉流行的apache web server软件,那么你会知道它最大的优势就在于它的定制化,你可以把它配置为只能显示静态的html,也可以动态的加载不同的模块以允许不同类型的服务内容。而以前使用的iis却一直无法很好的实现这一特性,这样就造成了两方面的问题:其一,由于过多用户并未使用的特性对于代码的影响,性能方面有时不能让用户满意;第二,由于默认的接口过多所造成的安全隐患。
新的iis7则完全解决了这个问题,iis7从核心层讲被分割成了40多个不同功能的模块。像验证、缓存、静态页面处理和目录列表等功能全部被模块化。这意味着你的web服务器可以按照你的运行需要来安装相应的功能模块。可能存在安全隐患和不需要的模块将不会再加载到内存中去,程序的受攻击面减小了,同时性能方面也得到了增强。
通过文本文件配置iis7
iis7另一大特性就是管理工具使用了新的分布式web.config配置系统。iis7不再拥有单一的metabase 配置储存,而将使用和asp.net支持的同样的web.config文件模型,这样就允许用户把配置和web应用的内容一起存储和部署,无论有多少站点,用户都可以通过web.config文件直接配置。
同时管理工具支持“委派管理(delegated administration)”,用户可以将一些可以确定的web.config文件通过委派的方式,委派给企业中其他的员工,当然在这种情形下,管理工具里显示的只是客户自己网站的设置,而不是整个机器的设置,这样iis管理员就不用为站点的每一个微小变化而费心,版本控制同样简单,用户只需要在组织中保留不同版本的文本文件,然后在必要的时候恢复它们就可以了。
用户现在可以用管理工具在windows客户机器上创建和管理任意数目的网站。而不再局限于单个网站,同时相比iis之前的版本,iis7的管理界面也更加的友好和强大,此外iis7的管理工具是用.net和windows forms写成的,是可以被扩展的。这意味着用户可以添加自己的ui模块到管理工具里,为自己的http 运行时模块和配置设置提供管理支持。
![](/uploads/image/uhm20101/201001291628575414.png)
iis7安全方面的增强
安全问题永远是微软被攻击的重中之重,其实并非微软对安全漠不关心,实在是因为微软这艘巨型战舰过于庞大,难免百密一失,好在微软积极的响应着每一个安全方面的意见与建议。iis的安全问题则主要集中在有关.net程序的有效管理以及权限管理方面的问题。而iis 7正是针对iis 服务器遇到了安全问题做了相应的增强。
在iis7中,.net应用程序直接通过iis代码运行而不再发送到internet server api扩展上,这样就减少了可能存在的风险,并且提升了性能,同时管理工具内置对asp.net 3.0的成员和角色管理系统提供管理界面的支持。这意味着用户可以在管理工具里,创建和管理角色和用户,以及给用户指定角色,下面是iis 7 完整的组件分报图。
![](/uploads/image/uhm20101/201001291628573540.jpg)
iis 7 完整的组件分报图
iis7的windows powershell 管理环境
相信关注脚本编程或者是exchange server 2007的朋友都不会对windows powershell感到陌生, windows powershell是一个特为系统管理员设计的windows 命令行shell 。在这个 shell 中包括一个交互提示和一个可以独立,或者联合使用的脚本环境。对于热爱脚本管理的it pro们windows powershell必将让他们爱不释手。而对于iis服务器,windows powershell同样可以提供全面的管理功能。
不过虽然powershell也可以管理运行在windows server 2003上的iis6,但是iis7才是特为通过powershell的命令行来进行管理的。它包括了新的appcmd功能,appcmd通过标准的命令行界面来创建和配置站点,这样的命令行工具的应用场景也非常常见,当用户的环境中用到例如脚本管理的时候,appcmd就将发挥非常其极大的优势。
![](/uploads/image/uhm20101/201001291628571084.png)
windows powershell 管理图
iis7 迁移
iis7 迁移网站比iis6.0更方便,因为apache web server它最大的优势就在于它的定制化管理,iis7现在使用apache概念,所以把站点的配置文件拷贝到另一台iis7主机上即可以。
asp.net和iis 7之集成
在早期的iis版本中,开发人员需要编写isapi扩展/过滤器来扩展服务器的功能。除了写起来非常痛苦外,isapi在如何接入服务器以及允许开发人员定制方面也是非常有限。例如,你无法在isapi扩展中实现url重写代码(注:asp.net是以isapi扩展的方式实现的)。假如你把运行时间长的代码编写成isapi过滤器的话,结果是你将占用web服务器的i/o线程(这就是我们不让托管代码在请求的过滤器执行阶段运行的原因)。
我们在iis7中对核心iis处理引擎做的一个重大的架构级变动是通过一个新的模块化的请求管道架构来促成极其丰富的扩展性。你现在可以通过与web服务器注册一个http扩展性模块(http extensibility module),在任意一个http请求的生命周期的任何地方编写代码。这些扩展性模块可以使用native的c 代码或.net托管代码来编写(你可以使用现有的asp.net system.web.ihttpmodule接口来实现)。
所有“内置”的iis7功能(认证,授权,静态文件供应,目录清单支持,经典的asp,记录日志等),现在都是使用这个公开的模块化的管道api来实现的。这意味着你可以除去这些iis7“内置”功能的任意一个,而以你自己的实现来替换/扩展这些功能。
iis 7上的asp.net本身也从以isapi的实现形式变成直接接入iis7管道的模块:
![](/uploads/image/uhm20101/201001291628571311.jpg)
iis6.0 和iis7 比较图
总而言之,iis 7将为web管理员以及web爱好者提供更加丰富,更加易用的管理工具。在新的iis7中,无论是管理方面还是安全方面都得到了全新的设计,而从用户群的角度上讲,利用iis7, 个人用户可以更快,更简便的建立自己的站点,而企业用户则可以更加全面,更加安全的维护和管理自己的web环境。
iis7的集成模式和经典模式
iis7中的web应用程序有两种配置模式:经典模式和集成模式。经典模式是为了与之前的版本兼容,使用isapi扩展来调用asp.net运行库,原先运行于iis6.0下的web应用程序迁移到iis7中只要将应用程序配置成经典模式,代码基本不用修改就可以正常运行。集成模式是一种统一的请求处理管道,它将asp.net请求管道与iis核心管道组合在一起,这种模式能够提供更好的性能,能够实现配置和管理的模块化,而且增加了使用托管代码模块扩展iis时的灵活性。如果老的web应用程序运行于iis7的集成模式下,可能需要对应用程序的web.config文件进行修改,尤其是使用了实现ihttphandler接口的自定义模块的情况。iis7在同一个服务器上能够同时支持两种模式的应用程序。
iis6.0中asp.net mmc管理单元用于配置asp.net,iis7中asp.net应用程序的管理域iis管理更加紧密的集成在一起,不存在单独的管理单元,所有的iis和asp.net配置都是使用iis管理器完成的。iis7配置信息基于.net framework配置系统,所以iis7中运行的应用程序的web.config文件同时包含web服务器和asp.net配置设置,例如可以再web.config文件中设置扩展名和文件的映射(iis6.0中必须在iis中进行配置)。
集成模式优点
iis 7 完全整合 .net 之后,架构的处理顺序有了很大的不同(如下图),最主要的原因就是 asp.net 从 iis 插件(isapi extension)的角色,进入了 iis 核心,而且也能以 asp.net 模块负责处理 iis 7 的诸多类型要求。这些 asp.net 模块不只能处理 asp.net 网页程序,也能处理其他如 asp 程序、php 程序或静态 html 网页,也因为 asp.net 的诸多功能已经成为 iis 7 的一部份,因此 asp 程序、php 程序或静态 html 网页等类型的要求,也能使用像是forms认证(forms authentication)或输出缓存(output cache)等 asp.net 2.0 的功能(但须修改 iis 7 的设定值)。也因为 iis 7 允许自行以 asp.net api 开发并加入模块,因此 asp.net 网页开发人员将更容易扩充 iis 7 和网站应用程序的功能,甚至能自行以 .net 编写管理 iis 7 的程序(例如以程控 iis 7 以建置网站或虚拟目录)
![](/uploads/image/uhm20101/201001291628570030.jpg)
iis 7 的执行架构图(集成托管信道模式下的架构)
参考资料:
asp.net 2和iis 7发生不兼容变化
windows server 2008中的iis7的五大特性
server2003对决2008之iis6对比iis7
发布时间:2010-01-29
作者:佚名
来源:本站原创