本文出处:Understanding Sites, Applications, and Virtual Directories on IIS 7
在IIS 6.0上,虚拟路径和应用程序两个概念,很容易让人迷惑的。在技术实现上,界线不是很清晰。应用程序与虚拟路径,并没有完全切割开。同时,对诸如ASP、ISAPI、ASP.NET等扩展了服务器功能的技术来说,“应用程序”这个概念又比在IIS上更加重要。这些技术势必使应用程序更加复杂,从而导致了IIS 6一个重要的问题,同个“如此复杂的应用程序”在不同应用程序池中不能相互隔绝(
【原话:The important question for IIS 6.0 was isolating such applications in a way that would prevent applications in one application pool from affecting applications in another application pool on the server.】
在IIS 7上,网站、应用程序和虚拟路径,是相互独立的概念。一个网站可以包含一个或者多个应用程序;一个应用程序可以包含一个或者多个虚拟路径;一个虚拟路径对应一个物理路径。
另外,由于IIS和ASP.NET的请求处理管道的合并,促使了页面可以预先利用托管代码应用程序提供的功能。举个例子,每个托管代码应用程序都运行在一个应用程序域(AppDomain)中(注:上面提到的托管代码应用程序提供的功能)。而一个应用程序可以有多个虚拟路径,这样,就可通过相同的应用程序域(当作应用程序)访问每个虚拟路径。
【原话:This is because the IIS and ASP.NET request-processing pipelines have merged in IIS 7 and above so that content can take advantage of functionality previously provided for only managed code applications. For example, each managed code application runs in an Application Domain (AppDomain). An application can have several virtual directories, and each one will be served by the same AppDomain as the application to which they belong.】
一、网站
网站包括两个重要的绑定:一个是协议绑定,一个是信息绑定。“协议绑定”所绑定的协议是客户端和服务器交流的协议(例如HTTP)。“信息绑定”是用于访问网站用的,比如IP址、端口等。如有需要,可以有多个协议绑定和信息绑定。
在早期版本的IIS中,只能支持HTTP、HTTPS的绑定,而在IIS 7 及更高版本中,可以绑定任何协议。这是由于Windows Process Activation Service (WAS)的改进。在IIS 7 及更高版本中,WAS保留了在IIS 6 相似的处理模式,比如,应用程序池、基于消息的进程激活;快速的故障保护(rapid failure protection)、监听以及回收等。同时,WAS移除了依赖于HTTP的架构。这促使了应用程序与应用程序能够通过标准协议进行交流。WCF的程序设计模型就是应用了这种技术,使得能够通过标准协议(TCP、MSMQ等)进行通信交流。这种技术,让采用了标准通信协议的应用程序(WCF)能够利用IIS的特性,如进程回收(process recycling)、快速故障保护(rapid failure protection)、以前只有基于http的应用程序的配置等。
以下配置设置也属于网站:
二、应用程序
每人网站必须有一个默认应用程序,叫做根应用程序或者默认应用程序。一个网站可以有多个应用程序。
除了属于一个网站,应用程序也属于一个应用程序池。
应用程序池用于隔离其他应用程序池里的应用程序。托管应用程序与其所属的应用程序池的.net框架版本必须一致。
IIS默认支持HTTP及HTTPS,同时也支持另外的协议。每个网站有一个或者多个“绑定协议”和“绑定信息”。应用程序必须启用其所需的协议(这个协议必须是其所属网站的绑定协议),如果是非HTTP/HTTPS时,又必须保证服务器上有对应的监听适配程序,并在配置文档中配置<listenerAdapters>节点。
三、虚拟路径
虚拟路径,在IIS中指定的一个目录名,用于映射本地或者远程服务器的物理路径。这个指定的目录名将成URL一部分。
每个应用程序都有一个虚拟路径,用于映射包含了“应用程序内容(the application's content)”的物理路径,这个虚拟路径被称为根虚拟目录。
然而一个应用程序可以有多个虚拟路径。举个例子,你有一个(物理的)目录包含一些图片文件,你希望这些图片包含到应用程序中,但又不想将这些图片文件移到根虚拟目录对应的物理路径下,这时你就可以为这个应用程序再指定一个虚拟路径,映射到这些图片文件所在的物理路径。
可以为虚拟路径指定用户名、密码、登录方法。
IIS默认使用物理路径及其子路径下的Web.config配置。如果不希望使用子目录的Web.config,则需要配置:
<sites><site>…<site>…<virtualDirectoryDefaults allowSubDirConfig="false " /></sites>