作者 :Jason Lee
本主题介绍如何配置特定于环境的属性,以便将示例 Contact Manager 解决方案部署到特定目标环境。
本主题构成了一系列教程的一部分,这些教程基于名为 Fabrikam, Inc 的虚构公司的企业部署要求。本教程系列使用示例解决方案( 联系人管理器 解决方案)来表示具有现实复杂性级别的 Web 应用程序,包括 ASP.NET MVC 3 应用程序、Windows Communication Foundation (WCF) 服务和数据库项目。
这些教程的核心部署方法基于 “了解生成过程”中所述的拆分项目文件方法,其中生成过程由两个项目文件控制,一个包含应用于每个目标环境的生成指令,另一个包含特定于环境的生成和部署设置。 在构建时,环境特定的项目文件将合并到环境无关的项目文件中,以形成一套完整的构建说明。
进程概述
将用于生成和部署 Contact Manager 解决方案的项目文件拆分为两个物理文件:
- 一个包含通用生成设置和说明( Publish.proj 文件)。
- 一个包含特定于环境的生成设置(Env-Dev.proj、 Env-Stage.proj 等)。
在生成时,适当的特定于环境的项目文件将合并到通用 Publish.proj 文件中,形成一组完整的生成说明。 可以通过创建或自定义环境特定的项目文件,使用描述自身部署场景的设置来配置到特定目标环境的部署。
许多值取决于目标环境的配置方式,特别是目标 Web 服务器是配置为使用 Web 部署代理服务(远程代理)还是 Web 部署处理程序。 有关这些方法的详细信息,以及有关如何为自己的环境选择合适的方法的指导,请参阅 “选择正确的 Web 部署方法”。
联系人管理器方案需要两个特定于环境的项目文件:
- 部署到开发人员测试环境(Env-Dev.proj)。 开发测试环境配置为接受通过远程代理进行的远程部署,如方案:为Web部署配置测试环境所述。 此文件需要提供远程代理终结点地址以及特定于位置的设置,例如连接字符串和服务终结点。
- 部署到预备环境(Env-Stage.proj)。 过渡环境配置为使用 Web 部署处理程序接受远程部署,如 方案:为 Web 部署配置过渡环境。 此文件需要提供 Web 部署处理程序终结点地址以及特定于位置的设置,例如连接字符串和服务终结点。
请务必注意,在特定于环境的项目文件中配置的设置不会影响 Web 包本身的内容,而是控制包的部署方式以及提取包时提供的参数值。 将 Web 包手动导入生产环境,如 方案中所述:为 Web 部署配置生产环境 并 手动安装 Web 包,因此生成包时,在特定于环境的项目文件中使用的设置并不重要。 导入包时,Internet Information Services (IIS) 管理器会提示输入任何参数化值,例如连接字符串和服务终结点。
若要将联系人管理器解决方案部署到自己的目标环境,可以自定义此文件或将其用作模板并创建自己的文件。
为 Contact Manager 解决方案配置针对环境的部署设置
在 Visual Studio 2010 中打开 ContactManager-WCF 解决方案。
在 “解决方案资源管理器” 窗口中,展开 “发布 ”文件夹,展开 EnvConfig 文件夹,然后双击 Env-Dev.proj。
将 Env-Dev.proj 文件中的属性值替换为你自己的测试环境的正确值。
注释
此过程后面的表提供了有关其中每个属性的详细信息。
保存工作,然后关闭 Env-Dev.proj 文件。
选择正确的部署属性
下表介绍了特定于环境的示例项目文件 Env-Dev.proj 中的每个属性的用途,并提供有关应提供的值的一些指导。
属性名称 | 详细信息 |
---|---|
MSDeployComputerName 目标 Web 服务器或服务终结点的名称。 | 如果要部署到目标 Web 服务器上的远程代理服务,可以指定目标计算机名称(例如 ,TESTWEB1 或 TESTWEB1.fabrikam.net),也可以指定远程代理终结点(例如, http://TESTWEB1/MSDEPLOYAGENTSERVICE )。 在每个情况下,部署的工作方式相同。 如果要部署到目标 Web 服务器上的 Web 部署处理程序,则应指定服务终结点,并将 IIS 网站的名称作为查询字符串参数(例如, https://STAGEWEB1:8172/MSDeploy.axd?site=DemoSite )。 |
MSDeployAuth Web 部署应该使用的远程计算机认证方法。 | 这应设置为 NTLM 或 Basic。 通常,如果要部署到远程代理服务,则使用NTLM;如果要部署到 Web 部署处理程序,则使用Basic。 如果使用基本身份验证,则还需要指定 IIS Web 部署工具(Web 部署)应模拟的用户名和密码才能执行部署。 在此示例中,这些值通过 MSDeployUsername 和 MSDeployPassword 属性提供。 如果使用 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 要在其中部署 Contact Manager 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 中使用 localhost 或 IP 地址,而不是计算机名称或主机标头。 如果使用计算机名称或主机标头,IIS 中的 环回检查 安全功能可能会阻止 URL 并返回 HTTP 401.1 - 未经授权的 错误。 |
CmDatabaseConnectionString 数据库服务器的连接字符串。 | 连接字符串确定了两个方面的凭据:一是 VSDBCMD 用于联系数据库服务器并创建数据库的凭据,二是 Web 服务器应用程序池用于联系数据库服务器并与数据库交互的凭据。 基本上,你在这里有两个选择。 可以指定 集成安全性=true,在这种情况下使用集成 Windows 身份验证: 数据源=TESTDB1;集成安全性=true 在这种情况下,将使用运行 VSDBCMD 可执行文件的用户的凭据创建数据库,应用程序将使用 Web 服务器计算机帐户的标识访问数据库。 或者,可以指定 SQL Server 帐户的用户名和密码。 在这种情况下,VSDBCMD 同时使用 SQL Server 凭据来创建数据库,应用程序池用于与数据库交互: Data Source=TESTDB1;User Id=ASqlUser;Password=; 本主题中的演练假定你将使用集成的 Windows 身份验证。 |
CmTargetDatabase 您想给将在数据库服务器上创建的数据库命名的名称。 | 此处提供的值将作为参数添加到 VSDBCMD 命令。 它还用于生成 Web 服务器上的应用程序池可用于与数据库交互的完整连接字符串。 |
这些示例演示如何为特定部署方案配置这些属性。
示例 1 - 部署到远程代理服务
在本示例中:
- 您正在向 TESTWEB1 上部署远程代理服务。
- 你指示 Web 部署使用 NTLM 身份验证。 Web Deploy 将使用用于调用 Microsoft Build 引擎(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>
结论
此时,项目文件已完全配置为生成联系人管理器解决方案并将其部署到一个或多个目标环境。
若要将这些项目文件用作单步可重复部署过程的一部分,需要使用 MSBuild 执行 Publish.proj 文件,并将特定于环境的项目文件的位置作为参数传入。 您可以通过多种方式来做这件事:
- 有关 MSBuild 的概述和自定义项目文件的简介,请参阅 了解项目文件。
- 有关如何构建执行自定义项目文件的 MSBuild 命令的信息,请参阅 部署 Web 包。
- 有关如何将 MSBuild 命令合并到单步可重复部署的命令文件中的信息,请参阅 创建和运行部署命令文件。
- 有关如何通过 Team Build 执行自定义项目文件的信息,请参阅 创建支持部署的生成定义。