IIS 8.0 使用 ASP.NET 3.5 和 ASP.NET 4.5
作者:Won Yoo
兼容性
版本 | 说明 |
---|---|
IIS 8.0 | IIS 8.0 支持 ASP.NET 3.5 和 ASP.NET 4.5。 |
IIS 7.5 | IIS 7.5 支持 ASP.NET 3.5 和 ASP.NET 4.5。 |
IIS 7.0 | IIS 7.0 支持 ASP.NET 3.5 和 ASP.NET 4.5。 |
问题
Windows Server 2012 默认包括 .NET Framework 4.5,以及 .NET 3.5 Framework 的可选安装。 开发人员通常需要跨多个 .NET Framework 版本运行混合 Web 应用程序。
解决方案
Windows Server 2012 上的 IIS 8.0 在 Windows Server 2012 支持的所有 .NET Framework 版本上运行 ASP.NET 应用程序。 这意味着 ASP.NET 应用程序可以使用 .NET Framework 3.5 或 .NET Framework 4.5 在 IIS 8.0 上运行。 IIS 8.0 在不同的应用程序池中托管 .NET Framework 的版本,从而允许具有不同 .NET Framework 版本的多个 ASP.NET 应用程序同时在 Windows Server 2012 上运行。
IIS 8.0 支持使用图形 IIS 管理器工具和 IIS 命令行管理工具管理 ASP.NET 3.5 和 ASP.NET 4.5 应用程序。 有关详细信息,请参阅 IIS 8.0 ASP.NET 配置管理一文。
分步说明
先决条件
- IIS 安装在 Windows Server 2012 上。 若要详细了解如何安装 IIS 8,请参阅在 Windows Server 2012 上安装 IIS 8。
设置支持 ASP.NET 3.5 和 ASP.NET 4.5 的 IIS 8.0
在 Windows Server 2012 中,操作系统本机识别 .NET Framework 3.5 和 .NET Framework 4.5。 这意味着,基于 UI 和命令行驱动的设置都可用于打开 .NET Framework 的这两个版本,以及实现这两个 ASP.NET 版本与 IIS 8.0 的集成。
在本演练中,我们将使用 Windows Server 2012 Server 中的新服务器管理器 UI 来演示如何在 IIS 8.0 上启用 ASP.NET 3.5 和 ASP.NET 4.5。
首次登录到新的 Windows Server 2012 计算机时,将显示新的服务器管理器 UI。 单击“添加角色”,如下所示:
在“添加角色和功能向导”的第一个屏幕上,单击“下一步”。 此时会显示一个页面,可在其中选择所需的安装类型。 选择“基于角色”或“基于功能”的安装,如下所示:
单击“下一步”。向导的下一个屏幕会要求你选择要配置的服务器。
在下一个向导步骤中,系统将要求你选择一个或多个服务器角色。 在“角色”列表中向下滚动,并确保选中“Web 服务器(IIS)”复选框,如下所示:
单击“下一步”继续执行下一步,以便选择要在服务器上安装的其他特定功能。 再次单击“下一步”继续执行下一步。
下一个向导步骤显示有关 Web 服务器(IIS) 角色的一些介绍性信息。 再次单击“下一步”继续执行下一步。 现在,你应该在如下所示的向导步骤中:
请注意,许多 IIS 的默认子功能已处于打开状态,因为之前选择了 Web 服务器 (IIS) 服务器角色。 但是,我们希望同时启用 ASP.NET 3.5 和 ASP.NET 4.5 以在 IIS 8.0 上运行,因此我们需要启用一些其他 IIS 相关功能。 在“角色服务”列表中向下滚动,直到显示“应用程序开发”节点。 此节点最初已折叠,单击该节点并展开它,以显示其子级:
在“应用程序开发”节点,可以实现与 IIS 的 ASP.NET 集成。 请注意,功能列表中有一些具有类似名称的复选框。 与本演练相关的两个复选框是:
- ASP.NET 3. 5 - 此选项使 ASP.NET 3.5 能够在 IIS 8.0 上运行。 请注意,使用 Windows Server 2012 时,.NET Framework 3.5 不作为基本 OS 映像的一部分提供。 而是需要从 Internet 下载有效负载并连接到 Internet。
- ASP.NET 4.5 - 此选项使 ASP.NET 4.5 能够在 IIS 8.0 上运行。
首先单击“ASP.NET 3.5”复选框。 执行此操作时,将弹出其他对话框,如下所示:
由于 ASP.NET 3.5 已集成到 Windows Server 2012 安装程序中,Windows Server 2012 知道在 IIS 8.0 上启用 ASP.NET 3.5 所需的所有相关依赖项。 此弹出对话框仅显示将自动拉取和安装的内容。 由于我们确实希望启用 ASP.NET 3.5,因此请单击“添加所需功能”。
接下来,单击“角色服务”功能列表中的“ASP.NET 4.5”复选框。 单击两个 ASP.NET 相关复选框的最终结果如下所示:
即使你仅直接选择了“ASP.NET 3.5”和“ASP.NET 4.5”功能,向导也会自动打开许多其他项目。 此操作会自动完成,这样开发人员便无需明确选择 Windows Server 2012 上 ASP.NET“程序集”所需的各种组件部分。 此时,单击“下一步”接受更改。
此时,单击“安装”接受更改,并在 Windows Server 2012 上安装完整的 ASP.NET 支持。
此时,可以单击“关闭”并退出向导。
浏览 IIS 8.0 安装
安装 IIS 8.0 和 ASP.NET 集成后,我们可以看到 IIS 8.0 的基本 ASP.NET 占用情况。
在Windows“开始”菜单中,选择“所有程序”,然后展开“管理工具”菜单。 在生成的列表中,找到“Internet Information Services (IIS)管理器”并选择它以启动图形 IIS 管理工具:
启动 IIS 管理器后,在左侧窗口中展开服务器节点,以便显示“应用程序池”节点和“站点”节点。 执行此操作时,IIS 管理器将弹出一个对话框,询问是否要与最新的 Web 平台组件保持连接。 对于本演练,可以单击“无”。 此时,IIS 管理器如下图所示:
如果为 IIS 8.0 同时启用 ASP.NET 3.5 和 ASP.NET 4.5,默认情况下会创建六个不同的应用程序池。 其中四个应用程序是 IIS 8.0 的新增应用程序,而其他两个应用程序池则继续从以前的 Windows 版本沿用。
- 请注意,尽管“.NET Framework 版本”列显示 .NET Framework 版本为“v2.0”和“v4.0”,但这些版本等同于 ASP.NET 3.5 和 ASP.NET 4.5。 由于应用程序池绑定到 .NET Framework 版本的内部机制,写入配置的实际版本名称(因此显示在工具中)对应于原始 .NET Framework 文件版本。
- 经典版 .NET AppPool 和 DefaultAppPool 存在于早期版本的 Windows 中,因此系统会继续为 IIS 8.0 创建。 但请注意,由于 .NET Framework 4.5 是 Windows Server 2012 使用的默认 .NET Framework,IIS 8.0 上的“DefaultAppPool”也默认使用较新版本的 .NET Framework。
- 其他四个应用程序池是 Windows Server 2012 中的新增池。 有两个应用程序池用于运行 .NET Framework 3.5(.NET v2.0 和 .NET v2.0 经典版),另外两个应用程序池用于运行 .NET Framework 4.5(.NET Framework 4.5 和 .NET Framework 4.5 经典版)。
- “经典版”和“非经典版”应用程序池之间的区别在于每个应用程序池类型支持的托管管道模式。 以“经典版”结尾的两个应用程序池支持用于 ASP.NET 的旧 Windows Server 2003 时代经典版管道模式,而其他两个应用程序池则使用 Vista/IIS7.0 中引入的 ASP.NET 的新集成管道模式。
IIS 的默认安装始终将“默认网站”配置为侦听端口 80 上的 HTTP 请求。 深入查看“默认网站”,了解默认支持的 ASP.NET 版本。 右键单击“默认网站”,然后选择“管理网站”,然后选择“高级设置”,如下所示:
此时会弹出“高级设置”对话框,其中显示了用于运行“默认网站”的应用程序池(等等)。 如下图所示,“默认网站”在名为“DefaultAppPool”的应用程序池中运行:
如果单击应用程序池右侧的小省略号按钮,则会弹出一个附加对话框,其中显示了有关“DefaultAppPool”的详细信息。 如前所述,对于 IIS 8.0,“DefaultAppPool”默认为 ASP.NET 4.5,因此在“默认网站”中部署的 ASP.NET 4.5 应用程序将不起作用,而无需任何进一步的配置。
此时单击“取消”,以取消“选择应用程序池”对话框和“高级设置”对话框。
同时运行 ASP.NET 3.5 和 ASP.NET 4.5 应用程序
了解 IIS 8.0 的设置状态后,请尝试运行一些示例 ASP.NET 代码,以确认 ASP.NET 3.5 和 ASP.NET 4.5 应用程序都可以在单个 IIS 8.0 安装中同时运行。
ASP.NET 3.5 和 ASP.NET 4.5 的示例代码包含在以下 .zip 中:
首先,在 IIS 8.0 上设置简单的 ASP.NET 3.5 应用程序:
打开“examples.zip”文件。
在 Windows Server 2012 计算机上的 Windows 资源管理器中,导航到 IIS 安装的“wwwroot”目录。 例如,如果在 C:\ 驱动器上安装 IIS,则“wwwroot”目录将位于
c:\inetpub\wwwroot
。从“examples.zip”复制文件夹“example35”,并将其粘贴到目录
c:\inetpub\wwwroot
。 完成后,目录结构应如下所示:
新创建的“example35”文件夹需要配置为 IIS 管理器中的 ASP.NET 3.5 应用程序。 返回到“IIS 管理器”窗口,单击“默认网站”节点,然后选择“刷新”。 “默认网站”下子节点的树视图现在会显示“example35”文件夹:
右键单击“example35”文件夹,然后选择“转换为应用程序”:
此时将弹出“添加应用程序”对话框。 默认情况下,“默认网站”中的所有目录都是名为“DefaultAppPool”的应用程序池的一部分。 这意味着,包含 ASP.NET 的新创建的文件夹默认作为 ASP.NET 4.5 应用程序运行。
由于我们希望将“example35”文件夹作为 ASP.NET 3.5 应用程序运行,因此需要更改应用程序池。 单击“选择”,随即将弹出“选择应用程序池”对话框。 将应用程序池更改为“.NET v2.0”,如下所示:
单击“确定”按钮以接受应用程序池更改,然后再单击“确定”将更改提交到 IIS。 随即将再次显示“IIS 管理器”窗口。 在显示“默认网站”的树视图中,“example35”的图标会发生更改,以表明它现在是单独的 ASP.NET 应用程序。
此时,启动 Internet Explorer 实例并导航到以下 URL:
http://localhost/example35
短暂暂停后,应用程序会显示此应用程序中支持的 .NET Framework 功能列表。
在 Windows 资源管理器中,如果导航到
c:\inetpub\wwwroot\example35
目录,则可以使用记事本查看“default.aspx”的代码以及“web.config”中的信息。 例如,web.config 的内容包括将 .NET Framework 编译器配置为在“3.5”模式下运行的指令。 “default.aspx”中的 .NET Framework 代码演示了 .NET 3.5 中引入的一些 C# 构造,尤其是 LINQ-to-Object 查询。
运行 ASP.NET 3.5 应用程序后,可以创建第二个 ASP.NET 应用程序,但这次将其配置为使用 .NET Framework 4.5。
返回到打开 .zip 文件“examples.zip”的 Windows 资源管理器窗口。
打开“example45”文件夹的内容。
在打开的第二个 Windows 资源管理器窗口中,导航到
c:\inetpub\wwwroot
。从 .zip 文件复制“default.aspx”文件,并将其直接粘贴到
c:\inetpub\wwwroot
。c:\inetpub\wwwroot
的文件夹内容现在应如下所示:
现在返回到 Internet Explorer 并导航到以下 URL:
http://localhost/default.aspx
短暂暂停后,第二个应用程序池将开始为“默认网站”运行 ASP.NET 4.5 应用程序。 浏览器再次显示此应用程序中支持的 .NET Framework 功能列表,并在列表末尾为动态类型变量添加了一个新条目(即 .NET Framework 4.0/4.5 中引入的 dynamic 关键字)。 请注意,与需要特殊 web.config 条目的“example35”应用程序不同,不需要 web.config 文件即可配置和运行“默认网站”中的“default.aspx”页。 这是因为 .NET Framework 4.5 是 IIS 8.0 中 ASP.NET 应用程序使用的默认 .NET Framework,因此不需要额外的配置。
如果使用记事本打开刚刚复制的“default.aspx”页面,你还会发现与“example35”目录中的版本相比有一些变化。 页面顶部没有命名空间指令,因为 .NET Framework 4.5 是 IIS 8.0 上的默认值。 页面上的代码演示如何使用 dynamic 变量,这是 .NET Framework 4.0/4.5 中引入的编译器概念。
总结
IIS 8.0 支持使用不同应用程序池在同一台计算机上运行 ASP.NET 3.5 和 ASP.NET 4.5 应用程序,以托管每个 .NET Framework 版本。 IIS 8.0 支持多个 .NET Framework 版本,使开发人员和管理员能够充分利用 IIS 8.0,同时与从 Windows Server 2008 R2 沿用的 Web 应用程序保持向后兼容性。