逐步解說:使用 Web 部署套件部署 Web 應用程式專案 (第 3 部分,共 4 部分)
這是一系列逐步解說中的第三個,內容說明如何使用 Web 部署套件來部署 Web 應用程式專案。 如需這些系列的詳細資訊,請參閱逐步解說:使用 Web 部署套件部署 Web 應用程式專案 (第 1 部分,共 4 部分)。
在這個逐步解說中,您會建立可用來將 Web 應用程式專案部署至開發用環境的部署套件。 此套件是使用參數來建立,而這些參數可讓您在安裝時變更某些組態值。 此外,您也可以針對部署至實際執行伺服器的作業使用相同的套件。 這個逐步解說將說明下列工作:
針對 [發行] 組建組態建立套件。
轉換目的環境的 Web.config 檔案設定。
在部署期間加入自訂 SQL 指令碼。
部署預設的 ASP.NET 成員資格資料庫,但排除在您本機電腦上建立的帳戶資訊。
針對您想要在安裝套件時變更的組態值使用自訂部署參數。
必要條件
如需必要條件的清單,請參閱逐步解說:使用 Web 部署套件部署 Web 應用程式專案 (第 1 部分,共 4 部分)。
建立目的資料庫
與您在前兩個逐步解說中針對 [偵錯] 組建組態所進行的作業一樣,您也會將 App_Data 資料夾中兩個資料庫的內容部署至單一資料庫中。
如果其他人正在為您設定目的環境,進行設定的人員必須提供目的資料庫的連接字串。 如果您要自行建立目的資料庫,可以執行下列程序,這個程序就像是您在第一個逐步解說中進行的程序。
注意事項 |
---|
您可以在目的伺服器或任何其他電腦上執行下列程序,只要您可以從目的伺服器存取資料庫即可。如果您在非目的伺服器的電腦上建立資料庫,就必須確定可透過遠端連接存取資料庫。如何進行此作業的說明已超出本逐步解說的範圍。如需詳細資訊,請參閱 SQL Server 線上叢書。 |
若要建立目的資料庫
在 [伺服器總管] 中,以滑鼠右鍵按一下 [資料連接],然後按一下 [建立新的 SQL Server 資料庫]。
[建立新的 SQL Server 資料庫] 對話方塊隨即顯示。
在 [伺服器名稱] 方塊中,輸入 localhost\SQLExpress。
在 [新資料庫名稱] 方塊中,輸入 AdventureWorksStaging。
按一下 [確定]。
設定使用中組建組態
在本系列先前的逐步解說中,您已設定了 [偵錯] 組建組態的部署設定。 不過,某些部署設定應該會與部署至開發用伺服器和實際執行伺服器的設定有所不同。 例如,您通常不想要將 .pdb 檔案部署至開發用或實際執行伺服器,因為 .pdb 檔案只用於偵錯。 因此,您必須針對 [發行] 組建組態建立新的部署設定。 該程序的第一個步驟是確定您選取了 [發行] 組建組態。
若要設定使用中組建組態
按一下 [建置] 功能表上的 [組態管理員]。
[組態管理員] 對話方塊隨即出現。
在 [使用中的方案組態] 下拉式清單中,選取 [發行]。
[使用中的方案組態] 清單通常也會顯示在 [標準] 工具列上。 如果此清單顯示在該處,您就可以確認或變更組建組態,而不必開啟 [組態管理員]。
關閉 [組態管理員]。
指定部署封裝設定
下一個步驟是指定應該針對 [發行] 組態部署哪些檔案和 IIS 設定,以及應該如何建立套件。 在下列程序中,您會使用專案 [屬性] 頁面的 [封裝/發行 Web] 索引標籤來進行此作業。
若要指定發行組態的部署封裝設定
在 [方案總管] 中,以滑鼠右鍵按一下專案名稱,然後按一下 [屬性]。
選取 [封裝/發行 Web] 索引標籤。
在 [組態] 下拉式清單中,確認已選取 [使用中 (發行)]。
在 [要部署的項目 (適用於所有的部署方法)] 下拉式清單中,確認已選取 [只有執行此應用程式必須的檔案]。
選取 [排除產生的偵錯符號] 核取方塊。
您不打算在開發用或實際執行環境中啟用偵錯。 因此,您不想要部署 .pdf 檔案。
選取 [排除來自 App_Data 資料夾的檔案] 核取方塊。
確定已選取 [包含 [封裝/發行 SQL] 索引標籤中設定的所有資料庫] 核取方塊。
確定已選取 [建立部署套件為壓縮檔] 核取方塊。
確定 [要建立封裝的位置] 方塊包含下列值 (如果您將 AdventureWorks 指定為專案名稱,這就是預設值):
obj\Release\Package\AdventureWorks.zip
在 [要在目的伺服器上使用的 IIS 網站/應用程式名稱] 方塊中,輸入 Default Web Site/AdventureWorks。
將變更儲存到 [封裝/發行 Web] 索引標籤。
建立成員資格資料庫的自訂指令碼
部署至開發用伺服器和實際執行伺服器的資料庫部署設定就像是您針對 [偵錯] 組建組態所輸入的設定。 其差異在於您不想要部署已在 ASP.NET 成員資格系統中輸入的測試使用者帳戶。 不過,您無法針對 ASP.NET 成員資格資料庫單獨指定 [僅限結構描述] 資料庫部署。 這是因為資料庫的其中一個資料表包含 ASP.NET 成員資格系統所需的組態資料。 因此,您將會建立自訂指令碼,以便加入組態資料。
您將指定兩個指令碼會在部署時執行。 第一個指令碼是針對 [僅限結構描述] 設定自動產生的指令碼。 第二個指令碼是您的自訂指令碼。
在下列程序中,您會建立自訂指令碼,以便將組態資料插入已部署的 aspnet_SchemaVersions 資料表中。
若要建立自訂指令碼,以便將資料插入已部署的 aspnet_SchemaVersions 資料表中
在命令列提示字元中,輸入下列 Web 部署 命令:
"C:\Program Files\IIS\Microsoft Web Deploy\msdeploy.exe" -verb:sync -source:dbfullsql="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=[aspnetdb.mdf 的完整路徑]\aspnetdb.mdf;User Instance=true" -dest:dbfullsql="c:\temp\aspnet_SchemaVersions.sql
這個 Web 部署 命令會建立名為 aspnet_SchemaVersions.sql 的資料庫指令碼,並將指令碼儲存在 C:\Temp 資料夾中。 此指令碼會建立成員資格資料庫。
您可以將指令碼儲存在任何資料夾中。 請記住該位置,因為您之後將在本逐步解說中存取指令碼。
將 [aspnetdb.mdf 的完整路徑] 取代成 aspnetdb.mdf 檔案的實際路徑。 如果 Program Files 資料夾位於不同的磁碟機,請取代成正確的磁碟機代號。 當您在 [方案總管] 中選取 aspnetmdb.mdf 時,就可以在 [屬性] 視窗的 [完整路徑] 屬性中找到 aspnetmdb.mdf 檔案的路徑。
在 [記事本] 等文字編輯器中開啟 aspnet_SchemaVersions.sql 並刪除所有項目,但 aspnet_SchemaVersions 資料表的 Insert 陳述式除外。
aspnet_SchemaVersions.sql 檔案現在看起來與下列範例很相似:
INSERT [dbo].[aspnet_SchemaVersions] ([Feature], [CompatibleSchemaVersion], [IsCurrentVersion]) VALUES (N'common', N'1', 1) GO INSERT [dbo].[aspnet_SchemaVersions] ([Feature], [CompatibleSchemaVersion], [IsCurrentVersion]) VALUES (N'health monitoring', N'1', 1) GO INSERT [dbo].[aspnet_SchemaVersions] ([Feature], [CompatibleSchemaVersion], [IsCurrentVersion]) VALUES (N'membership', N'1', 1) GO INSERT [dbo].[aspnet_SchemaVersions] ([Feature], [CompatibleSchemaVersion], [IsCurrentVersion]) VALUES (N'personalization', N'1', 1) GO INSERT [dbo].[aspnet_SchemaVersions] ([Feature], [CompatibleSchemaVersion], [IsCurrentVersion]) VALUES (N'profile', N'1', 1) GO INSERT [dbo].[aspnet_SchemaVersions] ([Feature], [CompatibleSchemaVersion], [IsCurrentVersion]) VALUES (N'role manager', N'1', 1) GO
儲存並關閉 aspnet_SchemaVersions.sql。
指定資料庫部署設定
在下列程序中,您會指定要部署的資料庫以及部署方式。 您也會加入在先前程序中建立的自訂指令碼。
若要指定將在部署期間執行的 SQL Server 指令碼
按一下 [封裝/發行 SQL] 索引標籤。
按一下 [從 Web.config 匯入]。
確定已在 [資料庫項目] 方格中選取 [ApplicationServices-Deployment] 資料列。
在 [目的資料庫的連接字串] 方塊中,輸入目的資料庫的連接字串。 如果您要部署至在先前步驟中建立的資料庫,可以遵循下列步驟來進行此作業:
在 [伺服器總管] 中,展開 [資料連接] 資料夾,然後選取 [AdventureWorksStaging] 資料庫。
在 [屬性] 視窗中,選取 [連接字串] 屬性的值並將它複製到 [Windows 剪貼簿]。
在 [目的資料庫的連接字串] 方塊中,貼上連接字串。
在連接字串中,將 localhost 變更為電腦的名稱。
這是必要的步驟,因為您將部署至遠端電腦。 當部署指令碼在該電腦上執行時,或者當應用程式在該電腦上執行時,localhost 將不再代表您的電腦。
確定已選取 [從現有資料庫提取資料及/或結構描述] 核取方塊。
將 [資料庫指令碼編寫選項] 清單設定為 [僅限結構描述]。
遵循下列步驟,藉以加入您先前建立的 aspnet_SchemaVersions.sql 指令碼:
按一下 [加入指令碼] 按鈕。
在 [選取檔案] 對話方塊中,瀏覽至 C:\Temp\aspnet_SchemaVersions.sql,然後按一下 [開啟] 按鈕 (如果您在本逐步解說的先前步驟中,將指令碼儲存在不同的資料夾中,請使用該資料夾名稱)。
此時,aspnet_SchemaVersions.sql 檔案指令碼已加入至 [資料庫指令碼] 方格。
在 [資料庫項目] 資料表中,選取 [AWLTConnectionString-Deployment] 資料列。
在 [目的資料庫的連接字串] 方塊中,輸入您針對 ApplicationServices 資料庫所輸入的相同連接字串。
確定已選取 [從現有資料庫提取資料及/或結構描述] 核取方塊。
將 [資料庫指令碼編寫選項] 清單設定為 [結構描述和資料]。
遵循下列步驟,藉以加入將資料庫讀取權限授與 IIS 應用程式集區的指令碼:
如果您要部署至已建立的資料庫,請修改您在本系列第一個逐步解說中建立的 AdventureWorksGrant.sql 指令碼。 移除 CREATE LOGIN SQL 命令。 如果您要部署至其他人為您建立的資料庫,該位人員就應該提供指令碼。
您必須移除 CREATE LOGIN 命令,因為登入是針對伺服器而非資料庫所建立。
按一下 [加入指令碼] 按鈕。
在 [選取檔案] 對話方塊中,瀏覽至您想要使用的指令碼,然後按一下 [開啟] 按鈕。
此時,指令碼已加入至 [資料庫指令碼] 方格。
注意事項 這個指令碼是設計成使用 Windows 7 和 Windows Server 2008 R2 中的預設安全性設定。如果您正在使用舊版 Windows,或者您的電腦具有自訂安全性設定,當您的網站在 IIS 中執行時,這個指令碼可能不會將資料庫提供給網站所使用的認證。如需 SQL Server 安全性的詳細資訊,請參閱 SQL Server 線上叢書。
將變更儲存到 [封裝/發行 SQL] 索引標籤。
指定自訂指令碼的交易模式
在本系列的第一個逐步解說中,您已編輯專案檔,以便指定 AdventureWorksGrant.sql 指令碼應該在交易中執行。 這樣做會設定部署程序,讓所有指令碼都在相同的交易模式中執行。 因為您已經針對 [發行] 組建組態建立新的設定,所以必須針對 [發行] 組建組態進行相同的變更。 您也必須針對在這個逐步解說中加入的新自訂指令碼 (aspnet_SchemaVersions.sql) 進行相同的變更。
在下列程序中,您會在專案檔內進行這兩項變更。
若要指定自訂指令碼應該在交易中執行
在 [記事本] 等文字編輯器中開啟 AdventureWorks.csproj 或 AdventureWorks.vbproj 檔案。
若要瀏覽至專案目錄,請在 [方案總管] 中,以滑鼠右鍵按一下專案,然後按一下 [在 Windows 檔案總管中開啟資料夾]。
尋找與 [偵錯] 組建組態相關的 PropertyGroup 項目。
此項目的開頭標記看起來與下列範例很相似:
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
在 PropertyGroup 項目中尋找 PublishDatabaseSettings 項目。
在 PublishDatabaseSettings 項目中,尋找名為 ApplicationServices-Deployment 的 ObjectGroup 項目。
這個 ObjectGroup 項目中的第二個 Object 項目代表 aspnet_SchemaVersions.sql 指令碼。
在代表 aspnet_SchemaVersions.sql 指令碼的 Object 項目中,將 Source 項目的 Transacted 屬性值變更為 True。
在 PublishDatabaseSettings 項目中,尋找名為 AWLTConnectionString-Deployment 的 ObjectGroup 項目。
這個 ObjectGroup 項目中的第二個 Object 項目代表 AdventureWorksGrant.sql 指令碼。
在代表 AdventureWorksGrant.sql 指令碼的 Object 項目中,將 Source 項目的 Transacted 屬性值變更為 True。
儲存變更並關閉專案檔。
當 Visual Studio 詢問您是否想要重新載入專案時,請按一下 [重新載入] 按鈕。
在 [建置] 功能表中,按一下 [清除 AdventureWorks]。
設定 Web.config 檔案轉換
與您在本系列第一個逐步解說中針對 [偵錯] 組建組態所進行的作業一樣,您也必須確定已部署之 Web.config 檔案中的連接字串指向正確的資料庫。 此外,部署至開發用伺服器之前,您想要在已部署的 Web.config 檔案中進行下列變更:
停用偵錯。
將最小密碼長度增加至 8。
設定 machineKey 值,讓網站能夠在 Web 伺服陣列環境中執行。 在開發用環境和實際執行環境中,machineKey 值通常會不同。 因此,若要在這兩種環境中使用相同的套件,您必須確定已在安裝時設定這個值。
在下列程序中,您會針對 [發行] 組建組態建立轉換檔,以便停用偵錯並增加密碼長度。
若要針對已部署的 Web.config 檔案設定轉換
在 [方案總管] 中,展開 Web.config 檔案節點。
開啟 Web.Debug.config 檔案。
將完整的 connectionStrings 項目複製到 [Windows 剪貼簿]。
關閉 Web.Debug.config。
開啟 Web.Release.config 檔案。
請注意,您不需要進行任何動作,即可停用偵錯。 預設的 Web.Release.config 檔案已經包含進行此作業的標記,如下列範例所示:
<system.web> <compilation xdt:Transform="RemoveAttributes(debug)" /> ... </system.web>
刪除包含 connectionStrings 項目的註解區塊,然後在這個位置貼上 [剪貼簿] 的內容。
緊接在 compilation 項目後面,貼上下列標記:
<machineKey validationKey="staging" decryptionKey="staging" xdt:Transform="Insert" />
儲存並關閉 Web.Release.config 檔。
建立部署參數
在下列程序中,您會建立在實際執行伺服器上安裝套件時,可用來變更 machineKey 值的部署參數。
若要建立 machineKey 值的部署參數
在 [方案總管] 中,以滑鼠右鍵按一下專案,然後按一下 [加入新項目]。
在 [已安裝的範本] 面板中,選取 [C#] 或 [Visual Basic],然後選取 [XML 檔] 範本。
在 [名稱] 方塊中,輸入 Parameters.xml,然後按一下 [加入]。
刪除 <?xml version="1.0 encoding="utf-8" ?>,然後加入下列標記:
<parameters> <parameter name="machineKey" description="Please provide the machineKey value." defaultValue="staging" tags=""> <parameterEntry kind="XmlFile" scope="obj\\Release\\Package\\PackageTmp\\Web\.config$" match="//machineKey[@validationKey]" /> <parameterEntry kind="XmlFile" scope="obj\\Release\\Package\\PackageTmp\\Web\.config$" match="//machineKey[@decryptionKey]" /> </parameter> </parameters>
這個標記會建立名為 machineKey 的參數。 如果您使用 IIS 管理員來安裝所建立的套件,description 屬性值就會在您可以輸入 machineKey 值的方塊中顯示為標籤。
parameterEntry 項目會指定此參數值的使用位置。 kind 屬性會指定此值要插入 XML 檔案中。 scope 屬性會使用規則運算式來指定要更新的 XML 檔案 (此路徑會反映建立套件時 Web.config 檔案的路徑,而非它在已部署之 Web 應用程式中的路徑)。match 屬性會使用 XPath 運算式來選取要更新的屬性,也就是 machineKey 項目的 validationKey 和 decryptionKey 屬性。
建立套件
在下列逐步解說中,您會建立可用來部署至開發用伺服器與實際執行伺服器的套件。
若要建立套件
按一下 [專案] 功能表中的 [建置部署套件]。
Visual Studio 就會建置專案,然後建立部署套件,並在 [輸出] 視窗中顯示記錄。 在本系列的最後一個逐步解說中,您將在遠端伺服器上安裝這個套件。
後續步驟
在本系列的前兩個逐步解說中,您已將檔案系統 Web 應用程式專案部署至 IIS Web 應用程式,以便在開發電腦上進行測試。 在這個逐步解說中,您已建立套件,以便使用 Visual Studio 在建立套件時產生的 deploy.cmd 檔案,將套件部署至遠端電腦。
本系列的下一個和最後一個逐步解說是逐步解說:使用 Web 部署套件部署 Web 應用程式專案 (第 4 部分,共 4 部分)。 在該逐步解說中,您將實際部署套件。