服务器 频道

ASP.NET和IIS 7.0之集成

 ASP.NET和IIS7.0之集成

 在早期的IIS版本中,开发人员需要编写ISAPI扩展/过滤器来扩展服务器的功能。除了写起来非常痛苦外,ISAPI在如何接入服务器以及允许开发人员定制方面也是非常有限。例如,你无法在ISAPI扩展中实现URL重写代码(注:ASP.NET是以ISAPI扩展的方式实现的)。假如你把运行时间长的代码编写成ISAPI过滤器的话,结果是你将占用web服务器的I/O线程(这就是我们不让托管代码在请求的过滤器执行阶段运行的原因)。

 我们在IIS7中对核心IIS处理引擎做的一个重大的架构级变动是通过一个新的模块化的请求管道架构来促成极其丰富的扩展性。你现在可以通过与web服务器注册一个HTTP扩展性模块(HTTPExtensibilityModule),在任意一个HTTP请求的生命周期的任何地方编写代码。这些扩展性模块可以使用native的C++代码或.NET托管代码来编写(你可以使用现有的ASP.NETSystem.Web.IHttpModule接口来实现)。

 所有“内置”的IIS7功能(认证,授权,静态文件供应,目录清单支持,经典的ASP,记录日志等),现在都是使用这个公开的模块化的管道API来实现的。这意味着你可以除去这些IIS7“内置”功能的任意一个,而以你自己的实现来替换/扩展这些功能。

 IIS7.0上的ASP.NET本身也从以ISAPI的实现形式变成直接接入IIS7管道的模块:

 IIS6.0和IIS7.0比较图

 这带来诸多好处:

 1)你现在可以对服务器的所有请求(例如,.htm,.php,.jsp文件)使用ASP.NET表单认证,成员/角色,以及任何其他特性。

 2)你现在可以轻松地重写任何web请求的URL或者以种种有趣的方式对请求做改动。

 3)你可以使用VB或C#替换或扩展任何现有的IIS特性(例如,你可以除去内置的目录清单模块,接入你自己的模块)。

 这确实给.NET开发人员带来了无穷多的扩展性机会。

 

0
相关文章