部署了网站之后,就可以通过 IIS 的功能来管理网站宿主和执行的方式。
?
创建新站点
?????? IIS 7 能够在单台服务器上支持多个站点。要创建新站点,展开 IIS 管理器的树控件,右击“网站”,选择“添加网站”,会显示如下对话框:
??????
?????? 网站名称中可以填写有意义的内容,不过,它只用于在 IIS 里标识网站,但并不影响网站的内容。物理路径指定了 IIS 7 到哪里寻找服务新网站请求的内容。我们创建了一个新目录 C:\FileCopySite。“连接为”和“测试设置”按钮可以指定用于访问网站内容的不同用户身份。
?????? “绑定”一节可以指定 IIS 7 如何监听来自客户端的请求。IIS 7 支持一系列的网络协议,“类型”下拉列表有众多选项,但我们只关注 HTTP,因为它是最广泛被使用的。IP 地址我们采用默认的“全部未分配”,也就是说 IIS 监听处理其他网站在同一 TCP 端口上已经被服务的网络接口之外的全部网络接口。“端口”值指定 IIS 7 要监听客户端请求的 TCP 端口号,一般而言每个网站必须仅由唯一的端口提供服务,因此我们选择了 81,这样不会和默认网站的 80 端口相冲突。
?????? 勾选了“立即启动网站”,它表示在我们单击“确定”之后,IIS 就创建网站并开始监听请求。现在单击确定。
?
创建虚拟目录
?????? 在之前的部署网站系列文章里,我们把内容放到了 IIS 7 寻找内容的默认目录里。但我们也可以不这样做,而是把内容放到其他地方,然后通过虚拟目录来引用它。为了演示,我们在服务器上创建一个新目录,并把网站的内容复制到了那里,新目录路径如下:
C:\WebSiteDeployment\VirtualDirectory
?????? 为了把新目录关联到 IIS ,右击“默认网站”,选择“添加虚拟目录”,会打开如下对话框:
??????
?????? 我们希望网站的 URL 是这样的:/virtual">/virtual">/virtual">http://<servername>/virtual,因此在别名里输入了 virtual。单击“确定”创建虚拟目录。为了测试它,浏览器现在访问 URL http://localhost/virtual,你会看到自己的简单网站,但这一回内容是以新目录作为源的,并且通过自定义的 URL 来进行访问。
?????? 甚至可以有多个虚拟目录指向一个实际物理路径,访问同一资源时,显示的 URL 是不同的。
?
??????
使用 VirtualPathProvider
?????? VirtualPathProvider 类提供了虚拟目录之外的另一个选择,不再由文件系统提供网站内容,内容可以通过编程生成或者取自数据库。
?????? 下面我将通过一个从 SQL Server 表读取 ASPX 文件的简单示例来理解 VirtualPathProvider 类。我们在本地 SQL Server 上有一个如下图所示的数据库表,里面保存了 3 个页面:
??????
?????? 你可以看到表里有一个文件名(同时还是主键)和真是内容。内容可以是 ASP.NET 能够理解的任意类型的代码。
?
??????
?????? VirtualPathProvider 类被定义在 System.Web.Hosting 命名空间里。在 App_Code 目录里新增一个类并继承 VirtualPathProvider,至少要实现以下方法:
using System;
using System.Data.SqlClient;
using System.IO;
using System.Text;
using System.Web.Hosting;
?
// VirtualPathProvider: 使 Web 应用程序可以从虚拟文件系统中检索资源
public class DBPathProvider : VirtualPathProvider
{
public static void AppInitialize()
{
// HostingEnvironment: 在托管应用程序的应用程序域内向托管应用程
// 序