1. IIS7 Architecture
1.1 Protocol Listeners
IIS7提供了内核模式下的设备驱动程序HTTP.sys作为Protocol Listener来监听HTTP和HTTPS请求。WCF为了让服务器支持对non-HTTP的监听请求,设计相应协议的Listener Adapter,WCF的Listener Adapter同时包含有Protocol Listener和Listener Adapter的功能。
1.2 Service
IIS7提供了两个Service:WWW Service (World Wide Web Publishing Service)和WAS Service (Windows Process Activation Service)。
在IIS7中,WWW Service的功能包括:
1)作为HTTP Listener (HTTP.sys)的Listener Adapter。主要负责配置HTTP.sys、当配置改变时更新HTTP.sys、当请求进入请求队列时通知WAS Service。
2)负责收集Web Site的performance counter。
在IIS7中,WAS Service管理配置和worker process。这使得对于HTTP和non-HTTP的site可以使用一致的配置和处理模型。
从这个意义上说,如果你不需要HTTP功能,你可以使用WAS Service而无需使用WWW Service。例如,如果你的网站只监听TCP请求,而不监听HTTP请求,那就完全可以使用WCF listener adapter(NetTcpActivator)来代替WWW Service。因此,从这种意义上说,WWW Service更多的是作为HTTP监听请求的Adapter。
在启动的时候,WAS从ApplicationHost.config文件中读取配置信息,然后将信息传递给Listener Adapter,Listener Adapter建立WAS和Protocol Listener之间的通信,一旦Listener Adapter接收到配置信息便开始配置相应的Protocol Listener,然后启动Protocol Listener来监听请求。
WAS同时也管理Application Pool和Worker Process。对于HTTP和non-HTTP请求,当Protocol Listener接收到一个请求,WAS判断对应的Application Pool是否有Worker Process在运行,如果没有则启动一个Worker Process,然后由Worker Process来处理相应的请求。
1.3 Modules
IIS7较以往的IIS版本提供了新的架构,它不再将主要的功能放在服务器本身,而是提供了一个Web服务器引擎,你可以根据需要在Web服务器引擎中任意添加或删除组件(被称为Module)。
Modules具有相对独立的特性,例如,IIS使用authorization module来进行客户权限验证,使用cache module来管理cache活动。
这种构架带来的好处在于将IIS pipeline和ASP.NET pipeline结合到了一起来处理请求,从而减少了IIS和ASP.NET中重复的特性。例如,在先前的IIS版本中,请求的权限验证过程既要在IIS中的pipeline中处理,又要在ASP.NET中的pipeline中处理。
在一个worker process中,HTTP请求在IIS的 pipeline中被有序处理,在每一个处理步骤中,如果请求的处理需要native module,则直接调用native module处理运行,如果请求的处理需要managed module,则native ManagedModule engine创建一个应用程序域,然后运行managed module进行相应的处理。
1.4 HTTP请求处理流程
IIS7中的HTTP请求处理流程如图所示:
2. ASP.NET Integration with IIS
当含有ASP.NET应用程序的应用程序池被初始化,它将ASP.NET寄宿在worker process中,并给ASP.NET提供了在IIS pipeline中注册HTTP modules和handlers的机会,同时,ASP.NET也会订阅一些通知。