Sep 142006
 

译者注记:本想写一些关于IIS7新增特性的中文文章,怎奈个人语言组织不力,恰好在http://www.iis.net上看到了这篇文章,感觉深合心意,于是就翻译过来了,并非完全直译,某些术语中文容易误解的还保留英文,个别地方加上了些自己的体会。

The IIS7 Difference

By Jonathan Goodyear

原文地址:http://www.aspnetpro.com/opinion/2006/08/asp200608jg_o/asp200608jg_o.asp微软原定于2007年正式发布Windows Vista(Longhorn Server将会在稍后一段时间发布),届时将会有很多的新技术被呈现出来。我敢肯定你一定听说过Windows Presentation Foundation(译注:前期开发代号Avalon的东西,Vista新界面的程序框架库), Windows Communication Foundation(译注:Indigo), Windows Workflow Foundation(这个貌似还没有开发代号吧), 以及 Windows CardSpace (InfoCard), 这些部件在Vista中将会以.Net Framework 3.0的名义封装起来(以前叫做WinFX)。这些技术对都是会让我感觉非常激动的,但我更盼望的是Internet Information Services 7。(译注:作者先说了一段废话)

你或许迫切的想知道究竟IIS7为什么这样值得期待。 毕竟,这只是IT技术管理员该关心的东西,不是吗? 确实IIS7带来了很多IT管理员感兴趣的新特性,但它同时也为asp.net开发者带来了非常多的新东西。实际上,我并不能完全阐述明白它的新特性。我将尽我最大的努力把我的感受和大家可能感兴趣的东西带给大家 。
在核心底层,IIS7被分割成了40多个不同功能的模块。像验证,缓存,静态页面处理和目录列表等(估计英文原文更好理解:authentication, caching, static file handling, and directory browsing)。这意味着你的Web服务器可以按照你的运行需要来安装相应的功能模块。这意味着更小的受攻击面,同时也会有性能方面的增强,因为可能存在安全隐患和不需要的模块将不会加载到内存中去,同时这些模块也不需要通过处理管线(pipeline)。需要在线卸载某些模块?没问题–IIS7不需要重起,甚至它都不会眨一下眼(原文IIS7 won’t even miss a beat)。

说道请求管线(request pipeline),ASP.NET 将不会再以ISAPI扩展这种仅仅类似插件的方式存在于IIS中了。ASP.NET将会全部继承入IIS7的请求管线 (称作集成模式Integrated Mode),这将使它可以截取或相应整个IIS的事件。这种核心集成的方式也将会使ASP.NET的一些例如缓存和验证等特性将不必再有需要将非asp.net文件映射到asp.net的ISAPI方式运行时的性能牺牲。这些特性的使用很明显已经变为上面提到的一些IIS7的模块的功能了。例如,你可以建立自己的验证方式的商店,状态管理机制,或者是本地图像处理(译注:网站管理员们常用的一些图片水印组件可以下课了,因为现在asp.net本身就可以在图像输出管线上作拦截并加以处理),等等等等。

另一个IIS7编程角度的增强是可以在收到客户发起请求后修改请求头(Request header)。你也可以修改响应流(Response stream),甚至可以是cookie集 (甚至是在另外一个程序处理过之后还可以继续处理)。这将使得第三方Web应用程序整合以及Web程序同需要修改底层传输数据的ISAPI扩展的整合变得非常容易。同时你可以对输出的静态图片流作任何你想需要的修改,这将非常cool!

如果你要做健壮性检查,IIS7中将会有一个经典模式,在这个模式下,你的ASP.NET程序的运行方式将变得和IIS6中完全一样,你的Web应用程序使用的ASP.NET的版本可以在你的应用程序 所映射的进程池中指定。这个改变将从底层体系阻止了目前多个运行不同版本的ASP.NET程序的Web站点处于同一进程池的时候造成的问题(当试图加载第二个站点程序时,程序会崩溃)。 虽然可能会需要经典模式的情况非常少,但因为集成模式在架构上与经典模式稍微有所不同,所以可能会存在必须运行在经典模式的情况。

我被IIS7中的配置存储方式深深地打动了。所有的东西都被存在简单易懂的XML文件中。将不会再有令人疑惑的位掩码和整数值。实际上,连Metabase都没有了。但是你以前所创建的修改metabase的脚本不用作任何修改仍然会运行得很好,因为IIS7将他们正确地映射到新的配置文件的相应部分。主IIS的配置文件名字叫做applicationHost.config,位于 [systemroot]\system32\inetsrv\ 目录。它是从machine.config这个文件继承设置。同样有一个根级别的web.configfig文件用于设置全局ASP.NET参数,这个文件从machine.config和applicationHost.config中继承设置,这个文件位于[systemroot]\Microsoft.NET\Framework\versionNumber\CONFIG\ 目录,这种设置方式使开发和开发,服务器和服务器的配置之间紧紧咬合。另外,web.config还可以放在单独的文件服务器上,可以从多个Web服务器引用。不仅如此,IT管理员现在可以把某些Web服务器的设置,开放给下级单独的Web应用程序,通过独立的web.config配置。举例说明,直接通过在web.config里设置默认主页,而不是通过IIS管理器(即使你可以使用),这不是很棒吗? Web主机提供商将会非常喜欢这种灵活性,因为它将应用程序级别的职责下放给开发者来控制了–本来就当如此。(译注:如果你曾经使用过apache,你应当明白什么是.htaccess,而如今IIS也有这种机制了,只是名字改为web.config而已。想想吧,以后可以通过web.config直接控制某些web服务器设置,例如ip限制,http method定义,甚至很可能apache中最为著名的url rewrite可能都是举手之劳了)。
仅仅是将配置存储在XML中的话,似乎感觉还不够,现在还有一套全新的API用于管理配置文件的设定,想来这套API也应当是很容易使用的(译注:微软作品一向如此)。 这套API将包含在Microsoft.Web.Administration命名空间。举例说明,你可以用如下一段简单的可怜的C#代码来添加一个站点:

ServerManager iisManager = new ServerManager();

iisManager.Sites.Add(“NewSite”, “http”, “:80:”, _

“d:\\domains\\NewSite”);

iisManager.Update();

我想我们应该都认为老的IIS管理器界面应该过时了。IIS7的理念是所有组件化,新的IIS管理器也不例外。IIS7引入了一套全新界面的管理器,类似于浏览器风格。界面布局给人的感觉是非常直观的,同时扩展性也非常好,可以使你轻易的让你建立自己喜欢的的管理界面。

IIS7还有一些新特性我感觉是非常有必要提及的。首先是ASP.NET跟踪机制,它现在可以集成入IIS的日志机制了。这样就能提供一个简单,统一的位置来输出诊断信息,这将减少用于troubleshoot服务器问题的时间。其次,现在的Vista中附带的IIS7版本不再像以前一样只能建立1个站点了。同时,以前并发10连接限制虽然存在,但现在Vista的IIS不会简单拒绝客户请求,而是将请求放入队列中以便以后处理。(译注:我们更关心Longhorn,Vista的这点并发能力还是忽略吧。)

文章后面涉及的部分大多为ASP.NET的特性,略过不译。

  One Response to “翻译:The IIS7 Difference”

  1. 2003上带的是6来着吧。。。6还没怎么用呢,又出7?老天爷

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>