配置目标环境的部署属性

作者 :Jason Lee

本主题介绍如何配置特定于环境的属性,以便将示例 Contact Manager 解决方案部署到特定目标环境。

本主题是一系列教程的一部分,这些教程基于名为 Fabrikam, Inc 的虚构公司的企业部署要求。本教程系列使用示例解决方案( Contact Manager 解决方案)来表示具有实际复杂程度的 Web 应用程序,包括 ASP.NET MVC 3 应用程序、Windows Communication Foundation (WCF) 服务和数据库项目。

这些教程的核心部署方法基于 了解生成过程中所述的拆分项目文件方法,其中生成过程由两个项目文件控制,一个项目文件包含适用于每个目标环境的生成说明,另一个包含特定于环境的生成和部署设置。 在生成时,特定于环境的项目文件将合并到与环境无关的项目文件中,以形成一组完整的生成说明。

流程概述

将用于生成和部署 Contact Manager 解决方案的项目文件拆分为两个物理文件:

  • 一个包含通用生成设置和说明 (Publish.proj 文件) 。
  • 包含特定于环境的生成设置 (Env-Dev.projEnv-Stage.proj 等) 。

在生成时,相应的特定于环境的项目文件将合并到通用 Publish.proj 文件中,以形成一组完整的生成说明。 可以通过使用描述你自己的部署方案的设置创建或自定义特定于环境的项目文件来配置到特定目标环境的部署。

其中许多值取决于目标环境的配置方式,特别是目标 Web 服务器是配置为使用 Web 部署代理服务 (远程代理) 还是 Web 部署处理程序。 有关这些方法的详细信息,以及为自己的环境选择正确方法的指导,请参阅 选择正确的 Web 部署方法

Contact Manager 方案需要两个特定于环境的项目文件:

  • (Env-Dev.proj) 部署到开发人员测试环境。 开发人员测试环境配置为使用远程代理接受远程部署,如 方案:为 Web 部署配置测试环境中所述。 此文件需要提供远程代理终结点地址以及特定于位置的设置,例如连接字符串和服务终结点。
  • 部署到过渡环境 (Env-Stage.proj) 。 过渡环境配置为使用 Web 部署处理程序接受远程部署,如 方案:为 Web 部署配置过渡环境中所述。 此文件需要提供 Web 部署处理程序终结点地址以及特定于位置的设置,例如连接字符串和服务终结点。

请务必注意,在特定于环境的项目文件中配置的设置不会影响 Web 包本身的内容,而是控制包的部署方式以及提取包时提供的参数值。 要手动将 Web 包导入生产环境,如方案:为 Web 部署配置生产环境和手动安装 Web 包中所述,因此生成包时,在特定于环境的项目文件中使用了哪些设置并不重要。 Internet Information Services (IIS) 管理器会在导入包时提示输入任何参数化值,例如连接字符串和服务终结点。

若要将 Contact Manager 解决方案部署到你自己的目标环境,可以自定义此文件或将其用作模板并创建自己的文件。

为 Contact Manager 解决方案配置特定于环境的部署设置

  1. 在 Visual Studio 2010 中打开 ContactManager-WCF 解决方案。

  2. 解决方案资源管理器窗口中,依次展开“发布”文件夹、“EnvConfig”文件夹,然后双击“Env-Dev.proj”。

    在解决方案资源管理器窗口中,依次展开“发布”文件夹和“EnvConfig”文件夹,然后双击“Env-Dev.proj”。

  3. Env-Dev.proj 文件中的属性值替换为你自己的测试环境的正确值。

    注意

    此过程后面的表提供了有关其中每个属性的详细信息。

  4. 保存工作,然后关闭 Env-Dev.proj 文件。

选择正确的部署属性

下表描述了特定于环境的示例项目文件 Env-Dev.proj 中每个属性的用途,并提供了一些有关应提供的值的指导。

属性名称 详细信息
MSDeployComputerName 目标 Web 服务器或服务终结点的名称。 如果要部署到目标 Web 服务器上的远程代理服务,可以指定目标计算机名称 (例如 TESTWEB1TESTWEB1.fabrikam.net) ,也可以指定远程代理终结点 (例如 http://TESTWEB1/MSDEPLOYAGENTSERVICE ,) 。 部署在每种情况下的工作方式相同。 如果要部署到目标 Web 服务器上的 Web 部署处理程序,则应指定服务终结点,并将 IIS 网站的名称作为查询字符串参数 (,例如 https://STAGEWEB1:8172/MSDeploy.axd?site=DemoSite ,) 。
MSDeployAuth Web 部署应用于向远程计算机进行身份验证的方法。 这应设置为 NTLM基本。 通常,如果要部署到远程代理服务,将使用 NTLM ;如果要部署到 Web 部署处理程序,则使用 基本 。 如果使用基本身份验证,则还需要指定 IIS Web 部署工具 (Web 部署) 应模拟的用户名和密码才能执行部署。 在此示例中,这些值通过 MSDeployUsernameMSDeployPassword 属性提供。 如果使用 NTLM 身份验证,则可以省略这些属性或将其留空。
MSDeployUsername 如果使用基本身份验证,Web 部署将在远程计算机上使用此帐户。 这应采用 DOMAIN*username* (例如 FABRIKAM\matt) 的形式。 仅当指定基本身份验证时,才使用此值。 如果使用 NTLM 身份验证,则可以省略 属性。 如果提供了值,则将忽略该值。
MSDeployPassword 如果使用基本身份验证,Web 部署将在远程计算机上使用此密码。 这是在 MSDeployUsername 属性中指定的用户帐户的密码。 仅当指定基本身份验证时,才使用此值。 如果使用 NTLM 身份验证,则可以省略 属性。 如果提供了值,则将忽略该值。
ContactManagerIisPath 要部署联系人管理器 MVC 应用程序的 IIS 路径。 这应该是 IIS 管理器中显示的路径,格式为 [IIS 网站名称]/[Web应用程序名称]。 请记住,在部署应用程序之前,IIS 网站必须存在。 例如,如果已创建名为 DemoSite 的 IIS 网站,则可以将 MVC 应用程序的 IIS 路径指定为 DemoSite/ContactManager。
ContactManagerServiceIisPath 要部署联系人管理器 WCF 服务的 IIS 路径。 例如,如果已创建名为 DemoSite 的 IIS 网站,则可以将 WCF 服务的 IIS 路径指定为 DemoSite/ContactManagerService
ContactManagerTargetUrl 可在其中访问 WCF 服务的 URL。 这将采用 [IIS 网站根 URL]/[服务应用程序名称]/[服务终结点] 的形式。 例如,如果在端口 85 上创建了 IIS 网站,则 URL 将采用 格式 http://localhost:85/ContactManagerService/ContactService.svc。 请记住,MVC 应用程序和 WCF 服务将部署到同一服务器。 因此,只能从安装该 URL 的计算机访问此 URL。 因此,最好在 URL 中使用 localhost 或 IP 地址,而不是计算机名称或主机标头。 如果使用计算机名称或主机标头,IIS 中的环回检查安全功能可能会阻止 URL 并返回 HTTP 401.1 - 未授权错误。
CmDatabaseConnectionString 数据库服务器的连接字符串。 连接字符串确定 VSDBCMD 用于联系数据库服务器和创建数据库的凭据,以及 Web 服务器应用程序池用于联系数据库服务器并与数据库交互的凭据。 基本上,这里有两个选择。 可以指定 Integrated Security=true,在这种情况下,使用集成Windows 身份验证:Data Source=TESTDB1;Integrated Security=true 在这种情况下,将使用运行 VSDBCMD 可执行文件的用户的凭据创建数据库,应用程序将使用 Web 服务器计算机帐户的标识访问数据库。 或者,可以指定SQL Server帐户的用户名和密码。 在这种情况下,VSDBCMD 使用SQL Server凭据创建数据库,应用程序池使用凭据与数据库交互:Data Source=TESTDB1;User Id=ASqlUser;Password=Pa$$w 0rd 本主题中的演练假定你将使用集成Windows 身份验证。
CmTargetDatabase 要为将在数据库服务器上创建的数据库提供的名称。 此处提供的值将作为参数添加到 VSDBCMD 命令中。 它还用于生成 Web 服务器上的应用程序池可用于与数据库交互的完整连接字符串。

这些示例演示如何针对特定部署方案配置这些属性。

示例 1 - 部署到远程代理服务

在本示例中:

  • 你要部署到 TESTWEB1 上的远程代理服务。
  • 你正在指示 Web 部署使用 NTLM 身份验证。 Web 部署将使用用于调用 Microsoft 生成引擎 (MSBuild) 的凭据运行。
  • 你正在使用集成身份验证将 ContactManager 数据库部署到 TESTDB1。 将使用用于调用 MSBuild 的凭据部署数据库。
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>    
    <MSDeployComputerName Condition=" '$(MSDeployComputerName)'=='' ">
      TESTWEB1.fabrikam.net
    </MSDeployComputerName>
    <MSDeployAuth Condition=" '$(MSDeployAuth)'=='' ">NTLM</MSDeployAuth>
    <ContactManagerTargetUrl Condition =" '$(ContactManagerTargetUrl)'=='' ">
      http://localhost:85/ContactManagerService/ContactService.svc
    </ContactManagerTargetUrl>
    <ContactManagerIisPath Condition=" '$(ContactManagerIisPath)'=='' ">
      DemoSite/ContactManager
    </ContactManagerIisPath>
    <ContactManagerServiceIisPath 
      Condition=" '$(ContactManagerServiceIisPath)'=='' ">
        DemoSite/ContactManagerService
    </ContactManagerServiceIisPath>
    <CmDatabaseConnectionString Condition=" '$(CmDatabaseConnectionString)'=='' ">
      Data Source=TESTDB1;Integrated Security=true</CmDatabaseConnectionString>
    <CmTargetDatabase Condition=" '$(CmTargetDatabase)'=='' ">
      ContactManager
    </CmTargetDatabase>
  </PropertyGroup>  
</Project>

示例 2 - 部署到 Web 部署处理程序终结点

在本示例中:

  • 要部署到 STAGEWEB1 上的 Web 部署处理程序服务终结点。
  • 你正在指示 Web 部署使用基本身份验证。
  • 你正在指定 Web 部署应模拟远程计算机上的 FABRIKAM\stagingdeployer 帐户。
  • 使用SQL Server身份验证将 ContactManager 数据库部署到 STAGEDB1。
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>    
    <MSDeployComputerName Condition=" '$(MSDeployComputerName)'=='' ">
      https://STAGEWEB1:8172/MSDeploy.axd?site=DemoSite
    </MSDeployComputerName>
    <MSDeployAuth Condition=" '$(MSDeployAuth)'=='' ">Basic</MSDeployAuth>
    <MSDeployUsername Condition=" '$(MSDeployUsername)'=='' ">
      FABRIKAM\stagingdeployer
    </MSDeployUsername>
    <MSDeployPassword Condition=" '$(MSDeployPassword)'=='' ">
      Pa$$w0rd
    </MSDeployPassword>
    <ContactManagerTargetUrl Condition =" '$(ContactManagerTargetUrl)'=='' ">
      http://localhost:85/ContactManagerService/ContactService.svc
    </ContactManagerTargetUrl>
    <ContactManagerIisPath Condition=" '$(ContactManagerIisPath)'=='' ">
      DemoSite/ContactManager
    </ContactManagerIisPath>
    <ContactManagerServiceIisPath 
      Condition=" '$(ContactManagerServiceIisPath)'=='' ">
        DemoSite/ContactManagerService
    </ContactManagerServiceIisPath>
    <CmDatabaseConnectionString Condition=" '$(CmDatabaseConnectionString)'=='' ">
      Data Source=STAGEDB1;User ID=sa;'$($CREDENTIAL_PLACEHOLDER$)'
    </CmDatabaseConnectionString>
    <CmTargetDatabase Condition=" '$(CmTargetDatabase)'=='' ">
      ContactManager
    </CmTargetDatabase>
  </PropertyGroup>  
</Project>

结论

此时,项目文件已完全配置为生成 Contact Manager 解决方案并将其部署到一个或多个目标环境。

若要将这些项目文件用作单步可重复部署过程的一部分,需要使用 MSBuild 执行 Publish.proj 文件,并将特定于环境的项目文件的位置作为参数传递。 可以通过多种方式执行此操作: