設定目標環境的部署屬性

作者:Jason Lee

本主題描述如何設定環境特定屬性,以便將範例連絡人管理員解決方案部署到特定目標環境。

本主題構成一系列教學課程的一部分,以名為 Fabrikam, Inc 的虛構公司企業部署需求為基礎。本教學課程系列使用範例解決方案連絡人 管理員 解決方案來代表具有實際複雜層級的 Web 應用程式,包括 ASP.NET MVC 3 應用程式、Windows Communication Foundation (WCF) 服務和資料庫專案。

這些教學課程的核心部署方法是以 瞭解建置程式中所述的分割專案檔方法為基礎,其中建置程式是由兩個專案檔控制,一個包含適用于每個目的地環境的組建指示,另一個包含環境特定的組建和部署設定。 在建置階段,環境特定的專案檔會合並到與環境無關的專案檔中,以形成一組完整的建置指示。

處理序概觀

您將用來建置和部署連絡人管理員解決方案的專案檔會分割成兩個實體檔案:

  • 其中一個包含萬用群組建設定和指示, (Publish.proj 檔案) 。
  • 其中一個包含環境特定的組建設定, (Env-Dev.projEnv-Stage.proj等等) 。

在建置階段,適當的環境特定專案檔會合並到通用 Publish.proj 檔案中,以形成一組完整的組建指示。 您可以使用描述您自己的部署案例的設定,建立或自訂環境特定專案檔,以設定特定目的地環境的部署。

這些值有許多取決於目的地環境的設定方式,特別是您的目標 Web 服務器是設定為使用 Web Deployment Agent​ 服務, (遠端代理程式) 或 Web 部署處理常式。 如需這些方法的詳細資訊,以及針對您自己的環境選擇正確方法的指引,請參閱 選擇正確的 Web 部署方法

連絡人管理員案例需要兩個環境特定的專案檔:

  • 部署至開發人員測試環境 (Env-Dev.proj) 。 開發人員測試環境設定為使用遠端代理程式接受遠端部署,如 案例:設定 Web 部署的測試環境中所述。 此檔案必須提供遠端代理程式端點位址,以及連接字串和服務端點等特定位置設定。
  • 部署至預備環境 (Env-Stage.proj) 。 預備環境設定為使用 Web 部署處理常式接受遠端部署,如 案例:設定 Web 部署的預備環境中所述。 此檔案必須提供 Web Deploy 處理常式端點位址,以及連接字串和服務端點等位置特定設定。

請務必注意,您在環境特定專案檔中設定的設定不會影響 Web 套件本身的內容,而是控制封裝的部署方式,以及在擷取封裝時提供哪些參數值。 您會手動將 Web 套件匯入生產環境,如案例:設定 Web 部署的生產環境手動安裝 Web 套件中所述,因此產生套件時,您不需要在環境特定專案檔中使用的設定。 當您匯入封裝時,Internet Information Services (IIS) 管理員會提示您輸入任何參數化值,例如連接字串和服務端點。

若要將連絡人管理員解決方案部署至您自己的目標環境,您可以自訂此檔案,或使用它作為範本,並建立您自己的檔案。

設定連絡人管理員解決方案的環境特定部署設定

  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 Deploy 應該用來向遠端電腦進行驗證的方法。 這應該設定為 NTLMBasic。 一般而言,如果您要部署至遠端代理程式服務,則會使用 NTLM ;如果您要部署至 Web 部署處理常式,則會使用 Basic 。 如果您使用基本驗證,您也必須指定 IIS Web 部署工具 (Web Deploy) 應該模擬的使用者名稱和密碼,才能執行部署。 在此範例中,這些值是透過 MSDeployUsernameMSDeployPassword 屬性提供。 如果您使用 NTLM 驗證,您可以省略這些屬性,或讓這些屬性保持空白。
MSDeployUsername 如果您使用基本驗證,Web Deploy 會在遠端電腦上使用此帳戶。 這應該採用 DOMAIN*username* (格式,例如 FABRIKAM\matt) 。 只有在您指定基本驗證時,才會使用此值。 如果您使用 NTLM 驗證,則可以省略 屬性。 如果提供值,則會忽略此值。
MSDeployPassword 如果您使用基本驗證,Web Deploy 會在遠端電腦上使用此密碼。 這是您在 MSDeployUsername 屬性中指定的使用者帳戶密碼。 只有在您指定基本驗證時,才會使用此值。 如果您使用 NTLM 驗證,則可以省略 屬性。 如果提供值,則會忽略此值。
ContactManagerIisPath 您要在其中部署 Contact Manager 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認證來建立資料庫和應用程式集區來與資料庫互動:資料來源=TESTDB1;使用者識別碼=ASqlUser;Password=Pa$$w 0rd本主題中的逐步解說假設您將使用整合式Windows 驗證。
CmTargetDatabase 您想要提供您要在資料庫伺服器上建立之資料庫的名稱。 此處提供的值會新增至 VSDBCMD 命令作為參數。 它也可用來建置 Web 服務器上應用程式集區可用來與資料庫互動的完整連接字串。

這些範例示範如何針對特定部署案例設定這些屬性。

範例 1 - 部署至遠端代理程式服務

在此範例中:

  • 您要部署至 TESTWEB1 上的遠端代理程式服務。
  • 您正在指示 Web Deploy 使用 NTLM 驗證。 Web Deploy 將使用您用來叫用MICROSOFT BUILD ENGINE (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 Deploy 處理常式服務端點。
  • 您正在指示 Web Deploy 使用基本驗證。
  • 您正在指定 Web Deploy 應該模擬遠端電腦上的 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 檔案,並將環境特定專案檔的位置當做參數傳遞。 您可以透過各種方式執行此動作: