使用 Visual Studio 或 Visual Web Developer 通过SQL Server Compact部署 ASP.NET Web 应用程序:作为测试环境部署到 IIS - 第 5 个,共 12 个

作者 :Tom Dykstra

下载初学者项目

本系列教程介绍如何使用 Visual Studio 2012 RC 或 Visual Studio Express 2012 RC for Web 部署 (发布) 包含 SQL Server Compact 数据库的 ASP.NET Web 应用程序项目。 如果安装 Web 发布更新,也可以使用 Visual Studio 2010。 有关该系列的简介,请参阅 该系列中的第一个教程

有关演示 Visual Studio 2012 RC 版本后引入的部署功能的教程,演示如何部署除 SQL Server Compact 以外的SQL Server版本,以及如何部署到 Azure 应用服务 Web 应用,请参阅使用 Visual Studio ASP.NET Web 部署

概述

本教程演示如何将 ASP.NET Web 应用程序部署到本地计算机上的 IIS。

开发应用程序时,通常通过在 Visual Studio 中运行它进行测试。 默认情况下,这意味着你正在使用 Visual Studio Development Server (也称为 Cassini) 。 使用 Visual Studio Development Server 可以轻松地在 Visual Studio 开发过程中进行测试,但它的工作方式与 IIS 不完全相同。 因此,在 Visual Studio 中测试应用程序时,应用程序可能会正常运行,但在托管环境中部署到 IIS 时会失败。

可以通过以下方式更可靠地测试应用程序:

  1. 在开发期间在 Visual Studio 中进行测试时,请使用IIS Express或完整的 IIS,而不是 Visual Studio 开发服务器。 此方法通常会更准确地模拟站点在 IIS 下运行的方式。 但是,此方法不会测试部署过程或验证部署过程的结果是否正确运行。
  2. 使用稍后将应用程序部署到生产环境的相同过程,在开发计算机上将应用程序部署到 IIS。 除了验证应用程序是否在 IIS 下正常运行外,此方法还会验证部署过程。
  3. 将应用程序部署到与生产环境尽可能接近的测试环境。 由于这些教程的生产环境是第三方托管提供程序,因此理想的测试环境是托管提供程序的第二个帐户。 第二个帐户仅用于测试,但设置方式与生产帐户相同。

本教程介绍选项 2 的步骤。 部署到 生产环境 教程末尾提供了选项 3 的指南,在本教程末尾提供了选项 1 的资源链接。

提醒:如果在完成本教程时收到错误消息或某些内容不起作用,请务必检查故障排除页面

将应用程序配置为在中等信任环境中运行

在安装 IIS 并部署到 IIS 之前,需要更改 Web.config 文件设置,以使站点更像在典型的共享托管环境中运行。

托管提供商通常以 中等信任方式运行网站,这意味着有些操作是不允许的。 例如,应用程序代码无法访问 Windows 注册表,并且无法读取或写入应用程序的文件夹层次结构之外的文件。 默认情况下,应用程序在本地计算机上 以高信任 度运行,这意味着应用程序可能能够执行将应用程序部署到生产环境时会失败的操作。 因此,为了使测试环境更准确地反映生产环境,需要将应用程序配置为在中等信任环境中运行。

在应用程序 Web.config 文件中,在 system.web 元素中添加 trust 元素,如以下示例所示。

<configuration>
  <!-- Settings -->
  <system.web>
    <trust level="Medium" />
    <!-- Settings -->
  </system.web>
</configuration>

现在,即使在本地计算机上,应用程序也将在 IIS 中以中等信任方式运行。 通过此设置,可以尽早捕获应用程序代码尝试执行在生产环境中失败的操作。

注意

如果使用 Entity Framework Code First 迁移,请确保已安装版本 5.0 或更高版本。 在 Entity Framework 版本 4.3 中,迁移需要完全信任才能更新数据库架构。

安装 IIS 和 Web 部署

若要部署到开发计算机上的 IIS,必须安装 IIS 和 Web 部署。 默认的 Windows 7 配置中不包括这些配置。 如果已安装 IIS 和 Web 部署,请跳到下一部分。

使用 Web 平台安装程序 是安装 IIS 和 Web 部署的首选方法,因为 Web 平台安装程序会安装 IIS 的建议配置,并且会根据需要自动安装 IIS 和 Web 部署的必备组件。

若要运行 Web 平台安装程序以安装 IIS 和 Web 部署,请使用以下链接。 如果已安装 IIS、Web 部署或其任何所需组件,则 Web 平台安装程序仅安装缺少的内容。

将默认应用程序池设置为 .NET 4

安装 IIS 后,运行 IIS 管理器以确保将.NET Framework版本 4 分配给默认应用程序池。

在 Windows “开始 ”菜单中,选择“ 运行”,输入“inetmgr”,然后单击“ 确定”。 (如果 “运行” 命令不在 “开始 ”菜单中,可以按 Windows 键和 R 将其打开。或者右键单击任务栏,单击 “属性”,选择“ 开始菜单” 选项卡,单击“ 自定义”,然后选择“ 运行命令”。)

“Connections”窗格中,展开服务器节点并选择“应用程序池”。 在“ 应用程序池 ”窗格中,如果将 DefaultAppPool 分配给 .NET Framework 版本 4,如下图所示,请跳到下一部分。

Inetmgr_showing_4.0_app_pools

如果只看到两个应用程序池,并且它们都设置为 .NET Framework 2.0,则必须在 IIS 中安装 ASP.NET 4:

  • 通过右键单击 Windows“开始”菜单中的“命令提示符”并选择“以管理员身份运行”,打开命令提示符窗口。 然后运行 aspnet_regiis.exe ,使用以下命令在 IIS 中安装 ASP.NET 4。 (在 64 位系统中,将“Framework”替换为“Framework64”。)

    cd %windir%\Microsoft.NET\Framework\v4.0.30319
    aspnet_regiis.exe –iru
    

    aspnet_regiis_installing_ASP.NET_4

    此命令为 .NET Framework 4 创建新的应用程序池,但默认应用程序池仍将设置为 2.0。 你将将面向 .NET 4 的应用程序部署到该应用程序池,因此必须将应用程序池更改为 .NET 4。

如果关闭 了 IIS 管理器,请再次运行它,展开服务器节点,然后单击“ 应用程序池 ”再次显示“ 应用程序池 ”窗格。

“应用程序池 ”窗格中,单击“ DefaultAppPool”,然后在“ 操作 ”窗格中单击“ 基本设置”。

Inetmgr_selecting_Basic_Settings_for_app_pool

“编辑应用程序池”对话框中,将.NET Framework版本更改为 .NET Framework v4.0.30319,然后单击“确定”。

Selecting_.NET_4_for_DefaultAppPool

现已准备好发布到 IIS。

发布到 IIS

可通过多种方式使用 Visual Studio 2010 和 Web 部署进行部署:

  • 使用 Visual Studio 一键式发布。
  • 创建 部署包 并使用 IIS 管理器 UI 进行安装。 部署包包含 一个.zip 文件,其中包含在 IIS 中安装站点所需的所有文件和元数据。
  • 创建部署包并使用命令行进行安装。

在前面的教程中设置 Visual Studio 以自动执行部署任务的过程适用于所有这三种方法。 在这些教程中,你将使用这些方法中的第一个。 有关使用部署包的信息,请参阅 ASP.NET 部署内容映射

在发布之前,请确保在管理员模式下运行 Visual Studio。 (在 Windows 7 的“开始 ”菜单中,右键单击正在使用的 Visual Studio 版本的图标,然后选择“ 以管理员身份运行”。) 仅当发布到本地计算机上的 IIS 时,才需要管理员模式进行发布。

“解决方案资源管理器”中,右键单击“ContosoUniversity”项目 (而不是“ContosoUniversity.DAL”项目) 并选择“发布”。

此时显示“发布 Web”向导。

Publish_Web_wizard_Profile_tab

在下拉列表中,选择“ <新建...”>

在“ 新建配置文件 ”对话框中,输入“测试”,然后单击“ 确定”。

New_Profile_dialog_box

此名称与前面创建的 Web.Test.config 转换文件的中间节点相同。 使用此配置文件发布时,此对应关系会导致应用 Web.Test.config 转换。

向导会自动前进到“ 连接 ”选项卡。

在“ 服务 URL ”框中,输入 localhost

在“ 站点/应用程序 ”框中,输入 “默认网站/ContosoUniversity”。

在“ 目标 URL ”框中,输入 http://localhost/ContosoUniversity

不需要 “目标 URL ”设置。 Visual Studio 完成应用程序部署后,会自动打开默认浏览器以访问此 URL。 如果不希望浏览器在部署后自动打开,请将此框留空。

Publish_Web_wizard_Connection_tab_Test

单击“ 验证连接 ”以验证设置是否正确,并且可以连接到本地计算机上的 IIS。

绿色检查标记验证连接是否成功。

Publish_Web_wizard_Connection_tab_validated

单击“ 下一步 ”转到 “设置” 选项卡。

配置” 下拉框指定要部署的生成配置。 默认值为 Release,这是所需的值。

清除“在目标检查删除其他文件”框。 由于这是你的第一次部署,因此目标文件夹中没有任何文件。

在“数据库”部分中,在 SchoolContext 的“连接字符串”框中输入以下值:

Data Source=|DataDirectory|School-Prod.sdf

部署过程会将此连接字符串放入部署的 Web.config 文件中,因为选中了“在运行时使用此连接字符串”。

另请在“SchoolContext”下,选择“应用Code First 迁移”。 此选项会导致部署过程配置部署的 Web.config 文件以指定 MigrateDatabaseToLatestVersion 初始值设定项。 当应用程序在部署后首次访问数据库时,此初始值设定项会自动将数据库更新到最新版本。

DefaultConnection 的“连接字符串”框中,输入以下值:

Data Source=|DataDirectory|aspnet-Prod.sdf

更新数据库 保留为清除状态。 成员身份数据库将通过复制 App_Data 中的 .sdf 文件来部署,你不希望部署过程对此数据库执行任何其他操作。

Publish_Web_wizard_Settings_tab_Test

单击“ 下一步 ”转到“ 预览 ”选项卡。

在“ 预览 ”选项卡中,单击“ 开始预览 ”以查看要复制的文件的列表。

Publish_Web_wizard_Preview_tab_Test

Publish_Web_wizard_Preview_tab_Test_with_file_list

单击“发布” 。

如果 Visual Studio 不处于管理员模式,可能会收到一条指示权限错误的错误消息。 在这种情况下,请关闭 Visual Studio,在管理员模式下打开它,然后再次尝试发布。

如果 Visual Studio 处于管理员模式,则 “输出 ”窗口将报告成功生成和发布。

Output_window_publish_Test

浏览器会自动打开在本地计算机上 IIS 中运行的 Contoso University 主页。

Internet Explorer 窗口的屏幕截图,其中显示 Contoso University 环境指示器为“测试”而不是“开发”。

在测试环境中进行测试

请注意,环境指示器显示“ (测试) ”而不是“ (开发) ”,这表示环境指示器 的Web.config 转换成功。

Internet Explorer 窗口的屏幕截图,其中显示 Contoso University 环境指示器为“测试”而不是“开发”。

运行“ 学生 ”页,验证部署的数据库是否没有学生。 选择此页面可能需要几分钟才能加载,因为 Code First 会创建数据库,然后运行 Seed 方法。 (当你在主页上时,它没有这样做,因为应用程序尚未尝试访问数据库。)

Students_page_Test

运行“ 讲师 ”页,验证 Code First 是否使用讲师数据播种了数据库:

Instructors_page_Test

从“学生”菜单中选择“添加学生”,添加学生,然后在“学生”页中查看新学生,以验证是否可以成功写入数据库:

Add_Students_page_Test

Students_page_with_new_student_Test

在“ 课程 ”菜单中,选择“ 更新学分”。 “ 更新额度 ”页需要管理员权限,因此会显示 “登录 ”页。 输入之前创建的管理员帐户凭据 (“admin”和“Pas$w0rd”) 。 将显示 “更新额度 ”页,用于验证在上一教程中创建的管理员帐户是否已正确部署到测试环境。

Log_In_page_Test

Update_Credits_page_Test

验证 Elmah 文件夹是否存在,其中仅包含占位符文件。

Elmah_folder_Test

查看Code First 迁移的自动 Web.config 更改

C:\inetpub\wwwroot\ContosoUniversity 处打开已部署应用程序中的 Web.config 文件,可以看到部署过程Code First 迁移配置的位置,以便将数据库自动更新到最新版本。

突出显示部署过程配置的位置的屏幕截图,Code First 迁移将数据库自动更新到最新版本。

部署过程还创建了一个新的连接字符串,供Code First 迁移专门用于更新数据库架构:

DatabasePublish_connection_string

通过此附加连接字符串,可以指定一个用户帐户进行数据库架构更新,并为应用程序数据访问指定不同的用户帐户。 例如,可以将db_owner角色分配给Code First 迁移,并将db_datareader和db_datawriter角色分配给应用程序。 这是一种常见的深层防御模式,可防止应用程序中潜在的恶意代码更改数据库架构。 (例如,在成功的 SQL 注入攻击中可能会发生这种情况。) 这些教程未使用此模式。 它不适用于SQL Server Compact,在本系列后面的教程中迁移到SQL Server时也不适用。 Cytanium 站点仅提供一个用户帐户,用于访问在 Cytanium 创建的SQL Server数据库。 如果能够在方案中实现此模式,可以通过执行以下步骤来实现此模式:

  1. “发布 Web”向导的“设置”选项卡中,输入指定具有完整数据库架构更新权限的用户连接字符串,并清除“在运行时使用此连接字符串”检查框。 在部署的 Web.config 文件中,这将成为DatabasePublish连接字符串。
  2. 为希望应用程序在运行时使用的连接字符串创建 Web.config 文件转换。

现已将应用程序部署到开发计算机上的 IIS,并在其中进行了测试。 这将验证部署过程是否将应用程序的内容复制到正确的位置, (不包括不想) 部署的文件,以及 Web 部署在部署期间是否正确配置了 IIS。 在下一教程中,你将运行另一个测试来查找尚未完成的部署任务:设置 Elmah 文件夹的文件夹权限。

更多信息

有关在 Visual Studio 中运行 IIS 或IIS Express的信息,请参阅以下资源: