逐步解說:安裝時重新導向應用程式,以不同的 Web 服務為目標
本逐步解說示範如何使用 [URL 行為] 屬性、安裝程式類別和 Web 安裝專案,建立可以重新導向以不同的 Web 服務為目標之 Web 應用程式。 這在開發期間,當您需要以本機的 Web 服務為目標,並且想在部署應用程式後,使用 Web 服務的實際執行版本時,會很有用。
![]() |
---|
您的電腦可能會在下列說明中,以不同名稱或位置顯示某些 Visual Studio 使用者介面項目。 您所擁有的 Visual Studio 版本以及使用的設定會決定這些項目。 如需詳細資訊,請參閱 Visual Studio 設定。 |
建立 Web 應用程式專案
第一個步驟要建立 ASP.NET Web 應用程式專案,其中會包含 Web 服務的 Web 參考。
若要建立專案
- 建立有 Web 服務的 Web 參考之 Web 應用程式。 對此逐步解說而言,任何有效之 Web 服務的 Web 參考都可以。
加入安裝程式類別
安裝程式類別即所謂的安裝元件,是安裝期間當做自訂動作叫用的 .NET Framework 類別。 在上述情形中,您會將類別庫 (Class Library) 專案加入方案中。 在這個類別庫專案中,您將建立安裝程式類別並覆寫它的 Install 方法,加入程式碼以修改 Web 應用程式的 .config 檔。
若要建立類別庫專案
在 [方案總管] 中,以滑鼠右鍵按一下方案節點,然後按一下 [加入],再按一下 [新增專案]。
在 [加入新的專案] 對話方塊的 [Visual Basic] 節點中,選取 [類別庫]。
將專案命名為 InstallerClassLibrary。
若要加入及實作安裝程式類別
在 [方案總管] 中,以滑鼠右鍵按一下 [InstallerClassLibrary] 專案節點,然後按一下 [加入],再按一下 [類別]。
在 [加入新項目] 對話方塊中,選取 [安裝程式類別],然後將 [名稱] 變更為 WebServiceInstaller.vb。
當您按一下 [加入] 時,類別就會加入至您的專案中,而該安裝程式類別的設計工具將會開啟。
按兩下設計工具以開啟程式碼編輯器。
在 WebServiceInstaller.vb 中,將下列程式碼加入安裝程式類別模組的底部 (就在 End Class 宣告的上方);這個程式碼會實作 Install 方法:
Public Overrides Sub Install( ByVal stateSaver As System.Collections.IDictionary) ' Gets the parameter passed across in the CustomActionData. Dim install_log As New System.IO.StreamWriter("Installation.log") install_log.AutoFlush = True Try Dim providedName = Me.Context.Parameters.Item("ServerName") Dim svcName = Me.Context.Parameters.Item("ServiceName") install_log.WriteLine("Starting Edit of the config file") If providedName = "" OrElse svcName = "" Then Throw New InstallException("No arguments specified") End If ' Uses reflection to find the location of the config file. Dim strConfigLoc = System.Reflection.Assembly.GetExecutingAssembly().Location Dim strTemp = strConfigLoc strTemp = strTemp.Remove(strTemp.LastIndexOf("\"), Len(strTemp) - strTemp.LastIndexOf("\")) strTemp = strTemp.Remove(strTemp.LastIndexOf("\"), Len(strTemp) - strTemp.LastIndexOf("\")) Dim fInfo As New System.IO.FileInfo(strTemp & "\web.config") install_log.WriteLine("File info: " & strTemp) If Not fInfo.Exists Then Throw New InstallException("Missing config file") End If ' Loads the config file into the XML DOM. ' Loads the config file into the XML DOM. Dim xmlDoc = XDocument.Load(fInfo.FullName) ' Finds the right node and change it to the new value. Dim foundIt As Boolean = False For Each node In xmlDoc.<configuration>.<appSettings>.<add> If node.@key = "servername.service" Then ' Note that "Service1.asmx" should be replaced with the ' actual name of the XML Web service file. node.@value = "http://" & providedName & "/" & svcName & "/Service1.asmx" foundIt = True End If Next node If Not foundIt Then Throw New InstallException("Config file did not contain a ServerName section") End If ' Writes out the new config file. xmlDoc.Save(fInfo.FullName) Finally install_log.WriteLine("Ending edit of config file") install_log.Close() End Try End Sub
上述程式碼首先會建立將記錄自訂動作進度的安裝記錄檔。 System.Reflection 命名空間是用於尋找正在安裝的組件和相關聯的 .config 檔案。 XML 文件模型是用於逐一查看 .config 檔案,直到找到 appSettings 區段為止。 找到 servername.service 機碼時,其相關聯的值會改變,以包含傳遞進來之參數,並將應用程式重新導向為使用新的 Web 服務。
在 [方案總管] 中,按兩下 Web.config 檔案以開啟它。
複製 appSettings 區段中,Web 服務的機碼值。 此機碼的格式為 servername.service,其中 servername 是 Web 服務所在的伺服器,service 則是 Web 服務的名稱。
開啟程式碼編輯器中的安裝程式類別模組,然後使用您在之前步驟中複製的值,取代 "servername.service" 的文字。
加入 Web 安裝專案
安裝專案是用於建立應用程式的安裝程式。 安裝專案是以 Windows Installer 技術為基礎,其功能包括在安裝期間執行自訂動作和自訂安裝使用者介面的能力等等。 如需安裝專案的詳細資訊,請參閱部署應用程式和元件。
若要加入 Web 安裝專案
在 [方案總管] 中,以滑鼠右鍵按一下方案節點,然後按一下 [加入],再按一下 [新增專案]。
在 [加入新的專案] 對話方塊的 [專案類型] 窗格中,展開 [其他專案類型] 節點,然後選取 [安裝和部署專案] 節點。
在 [範本] 窗格中,選取 [Web 安裝專案]。 在 [名稱] 方塊中,將專案命名為 WebAppSetup。
當您按一下 [確定] 時,便會在方案中加入專案,而且會開啟 [檔案系統編輯器]。
在 [屬性] 視窗中,選取 ProductName 屬性,然後將其設定為 Web 應用程式的名稱。
在 [檔案系統編輯器] 中選取 [Web 應用程式資料夾]。
在 [動作] 功能表上指向 [加入],再按一下 [專案輸出]。
在 [加入專案輸出群組] 對話方塊中,從 [專案] 下拉式清單中選取 [InstallerClassLibrary];然後選取 [主要輸出]。
當您按一下 [確定] 時,便會將來自 InstallerClassLibrary 的主要輸出加入 Web 安裝專案。
加入自訂動作
自訂動作是用於在安裝結束時執行程式碼,以執行無法在安裝期間處理的動作。 自訂動作的程式碼可以包含在 .dll、.exe、指令碼或組件檔案中。 如需自訂動作的詳細資訊,請參閱部署中的自訂動作管理。
若要將安裝程式類別當做自訂動作加入
在 [方案總管] 中選取 [WebAppSetup] 專案。
在 [檢視] 功能表中指向 [編輯器],然後按一下 [自訂動作]。
此舉會開啟 [自訂動作編輯器] 選項。
在 [自訂動作編輯器] 中,選取 [安裝] 節點。
在 [動作] 功能表上選擇 [加入自訂動作]。
按兩下 [Web 應用程式資料夾],然後選取 [來自 InstallerClassLibrary 的主要輸出 (作用中)]。
在 [屬性] 視窗中,確定 [InstallerClass] 屬性已設定為 [True]。
選取 [CustomActionData] 屬性,然後輸入下列文字:/ServerName=[EDITA1] /ServiceName=[EDITA2]
CustomActionData 屬性以空格做為分隔,提供兩個傳遞至自訂動作的參數。
加入對話方塊
[使用者介面] 對話方塊會在安裝期間顯示,以收集使用者的資訊。 如需關於使用者介面對話方塊的詳細資訊,請參閱部署中的使用者介面管理。
若要加入自訂使用者介面對話方塊
在 [方案總管] 中,選取安裝專案。
在 [檢視] 功能表上指向 [編輯器],然後按一下 [使用者介面]。
在 [使用者介面編輯器] 中,選取 [安裝] 下的 [開始] 節點。
在 [動作] 功能表上,選擇 [加入對話方塊]。
在 [加入對話方塊] 對話方塊中,選取 [文字方塊 (A)] 對話方塊,再按一下 [確定]。
在 [動作] 功能表上選擇 [上移],然後重複動作,直到 [文字方塊 (A)] 對話方塊位於 [安裝位址] 對話方塊之上為止。
在 [屬性] 視窗中設定下列屬性:
屬性
值
BannerText
輸入伺服器名稱和服務名稱
Edit1Label
伺服器名稱:
Edit1Value
本端主機
注意事項
這會指定預設伺服器。您可以在此輸入專屬的預設伺服器名稱。Edit2Label
服務名稱:
Edit2Value
<服務名稱>
Edit3Visible
False
Edit4Visible
False
請注意,[Edit1Property] 屬性是設定為 “EDITA1”,[Edit2Property] 屬性則是設定為 “EDITA2”。 這些屬性與您在自訂動作編輯器之 [CustomActionData] 屬性中輸入的值相對應。 當使用者於安裝期間在這些編輯控制項中輸入文字時,值會自動經由 [CustomActionData] 屬性進行傳遞。
建置和部署應用程式
最後步驟為建置安裝專案以建立安裝程式,然後在目標伺服器上安裝您的應用程式。
若要建置安裝專案
- 在 [建置] 功能表上,選擇 [建置 Projectname],其中 Projectname 是安裝專案的名稱。
若要將應用程式部署至您的開發電腦上的 Web 伺服器
在 [方案總管] 中,選取安裝專案。
在 [專案] 功能表中,按一下 [安裝]。
若要將應用程式部署至其他電腦上的 Web 伺服器
在 [Windows 檔案總管] 裡,巡覽至您的專案目錄,然後找出所建置的安裝程式。 預設的路徑會是 \documents and settings\yourloginname\My Documents\Visual Studio Projects\setupprojectname\project configuration\productname.msi。 預設的 project configuration 則是 [Debug]。
將 .msi 檔和目錄中其他所有檔案與子目錄,複製到 Web 伺服器電腦中。
在 Web 伺服器電腦上,按兩下 Setup.exe 檔案執行安裝程式。