監(jiān)理公司管理系統(tǒng) | 工程企業(yè)管理系統(tǒng) | OA系統(tǒng) | ERP系統(tǒng) | 造價(jià)咨詢管理系統(tǒng) | 工程設(shè)計(jì)管理系統(tǒng) | 甲方項(xiàng)目管理系統(tǒng) | 簽約案例 | 客戶案例 | 在線試用
X 關(guān)閉

在安裝期間將應(yīng)用程序重定向到不同的XML Web services

申請(qǐng)免費(fèi)試用、咨詢電話:400-8352-114

AMTeam.org

在安裝期間將應(yīng)用程序重定向到不同的XML Web services


Steve Hoag

Visual Studio Team

Microsoft Corporation

2001 年 11 月

摘要:本文介紹了如何在 Visual Basic? .NET 中創(chuàng)建一個(gè) Web 應(yīng)用程序,通過(guò)使用 URL Behavior 屬性、Installer 類和 Web 安裝程序項(xiàng)目將該應(yīng)用程序重定向到不同的 XML Web services。

簡(jiǎn)介

在開(kāi)發(fā)以 XML Web services 為目標(biāo)的應(yīng)用程序時(shí),通常應(yīng)該以 Web 服務(wù)器上已安裝的 XML Web services 為目標(biāo)。這是一個(gè)準(zhǔn)則,不過(guò)在部署應(yīng)用程序的產(chǎn)品版本時(shí),有時(shí)也需要以其他 XML Web services 為目標(biāo)。例如,您可能已將開(kāi)發(fā)服務(wù)器上的 XML Web services 的測(cè)試版本作為目標(biāo),但是完成的應(yīng)用程序需要將另一個(gè)服務(wù)器上的 XML Web services 的安裝版本作為目標(biāo)。您可能還希望安裝該應(yīng)用程序的人員在安裝期間可以選擇 XML Web services 的版本,例如,Intranet 上的版本或者是可以從防火墻外部進(jìn)行訪問(wèn)的版本。

本文介紹了如何創(chuàng)建可以重定向到不同的 XML Web services 的 Web 應(yīng)用程序。創(chuàng)建過(guò)程包括:

指定 URL Behavior 屬性,以在運(yùn)行時(shí)查找 XML Web services。

添加能在安裝結(jié)束時(shí)執(zhí)行自定義操作的安裝組件。

使用安裝程序項(xiàng)目為應(yīng)用程序創(chuàng)建一個(gè)包含自定義用戶界面的安裝程序。

第一步是創(chuàng)建包含對(duì) XML Web services 進(jìn)行 Web 引用的 Web 應(yīng)用程序。有關(guān)創(chuàng)建 Web 應(yīng)用程序的詳細(xì)信息,請(qǐng)參閱 Visual Studio? .NET 文檔中的 Walkthrough: Creating an XML Web services Using Visual Basic or Visual C#(英文)。

將 URL Behavior 設(shè)置為 Dynamic

為了在運(yùn)行時(shí)查找 XML Web services,應(yīng)用程序?qū)⒋鎯?chǔ)該 XML Web services 的 URL。Web 引用(用于 XML Web services)的 URL Behavior 屬性決定 URL 的存儲(chǔ)位置。如果 URL Behavior 屬性被設(shè)置為 Static(默認(rèn)值),則 URL 將被硬編碼為 Web 引用的一部分。如果 URL Behavior 屬性被設(shè)置為 Dynamic,則指定 URL 的條目將被添加到該應(yīng)用程序的 Web.config 文件的 appSettings 段。

將 URL Behavior 屬性設(shè)置為 Dynamic

在 Solution Explorer(解決方案資源管理器)中,展開(kāi) Web References(Web 引用)節(jié)點(diǎn)并選擇對(duì) XML Web services 的引用。

在 Properties(屬性)窗口中,選擇 URL Behavior 屬性并將其更改為 Dynamic。

在 Solution Explorer(解決方案資源管理器)中,選擇 Web.config 文件并雙擊以打開(kāi)該文件。

在該文件末尾,應(yīng)該能夠找到一個(gè) 段,其中包含指定 XML Web services 名稱的關(guān)鍵字和指定 URL 的值。例如,對(duì)于能夠訪問(wèn)本地計(jì)算機(jī)上的 MyWebService 的名為 MyWebApp 的應(yīng)用程序,其外觀類似于:


value=http://localhost/MyWebService/Service1.asmx/>

下一步是添加 Installer 類,用于在安裝期間修改 .config 文件。

添加 Installer 類

Installer 類(也稱為安裝組件)是在安裝過(guò)程中被當(dāng)作自定義操作調(diào)用的 .NET 框架類。在這種情況下,您需要添加 Installer 類來(lái)代替 Install 方法,以添加修改 .config 文件的代碼。有關(guān) Installer 類的詳細(xì)信息,請(qǐng)參閱 Visual Studio .NET 文檔中的“Introduction to Installation Components”。

添加 Installer 類

在 Project(項(xiàng)目)菜單中,選擇 Add New Item(添加新項(xiàng))。

在 Add New Item(添加新項(xiàng))對(duì)話框中,選擇 Installer Class(Installer 類)并將 Name(名稱)更改為 WebServiceInstaller。

單擊 Open(打開(kāi))后,該類將被添加到您的項(xiàng)目,并打開(kāi)包含 Installer 類的設(shè)計(jì)器。

雙擊設(shè)計(jì)器以打開(kāi) Code Editor(代碼編輯器)。

在 Installer 類模塊(位于 End Class 聲明的上面)的底部添加用于 Install 方法的以下代碼:

Public Overrides Sub Install(ByVal stateSaver As
System.Collections.IDictionary)
' 獲取在 CustomActionData 中傳遞的參數(shù)。
Dim installlog As New System.IO.StreamWriter("Installation.log")
installlog.AutoFlush = True
Try
Dim ProvidedName As String
=Me.Context.Parameters.Item("ServerName")
Dim SvcName As String = Me.Context.Parameters.Item("ServiceName")

installlog.WriteLine("開(kāi)始編輯配置文件")

If ProvidedName = "" Or SvcName = "" Then
Throw New InstallException("未指定參數(shù)")
End If

' 使用反射查找配置文件的位置。
Dim Asm As System.Reflection.Assembly =
System.Reflection.Assembly.GetExecutingAssembly
Dim strConfigLoc As String
strConfigLoc = Asm.Location

Dim strTemp As String
strTemp = strConfigLoc
strTemp = strTemp.Remove(strTemp.LastIndexOf(""),
Len(strTemp) – strTemp.LastIndexOf(""))
strTemp = strTemp.Remove(strTemp.LastIndexOf(""),
Len(strTemp) – strTemp.LastIndexOf(""))

Dim FileInfo As System.IO.FileInfo =
New System.IO.FileInfo(strTemp & "web.config")

installlog.WriteLine("文件信息:" & strTemp)

If Not FileInfo.Exists Then
Throw New InstallException("缺少配置文件")
End If

' 將配置文件加載到 XML DOM。
Dim XmlDocument As New System.Xml.XmlDocument()
XmlDocument.Load(FileInfo.FullName)

' 找到正確的節(jié)點(diǎn)并將其更改為新值。
Dim Node As System.Xml.XmlNode
Dim FoundIt As Boolean = False
For Each Node In
XmlDocument.Item("configuration").Item("appSettings")
' 忽略所有注釋。
If Node.Name = "add" Then
If Node.Attributes.GetNamedItem("key").Value =
"appname.servername.service" Then
' 注意,“Service1.asmx”應(yīng)當(dāng)被替換為
' Web service 文件的實(shí)際名稱。
Node.Attributes.GetNamedItem("value").Value =
"http:\" & ProvidedName & "" &
SvcName & "Service1.asmx"
FoundIt = True
End If
End If
Next Node

If Not FoundIt Then
Throw New InstallException("配置文件不
包含 ServerName 段")
End If

' 編寫(xiě)新的配置文件。
XmlDocument.Save(FileInfo.FullName)

Finally
installlog.WriteLine("結(jié)束對(duì)配置文件的編輯")
installlog.Close()
End Try

End Sub

以上代碼首先創(chuàng)建用于記錄自定義操作進(jìn)度的安裝日志文件。System.Reflection 命名空間用于查找所安裝的程序集并查找關(guān)聯(lián)的 .config 文件。XML 文檔模型用于遍歷 .config 文件,直至找到 appSettings 段。找到關(guān)鍵字 appname.servername.service 后,其關(guān)聯(lián)值將發(fā)生更改以包含傳入的參數(shù),從而將應(yīng)用程序重定向?yàn)槭褂眯碌?XML Web services。

在 Solution Explorer(解決方案資源管理器)中,選擇 Web.config 文件并雙擊以打開(kāi)該文件。

在 appSettings 段中復(fù)制 XML Web services 的關(guān)鍵字值。關(guān)鍵字的形式為 appname.servername.service,其中 appname 是應(yīng)用程序的名稱,servername 是 XML Web services 所在的服務(wù)器,service 是 XML Web services 的名稱。

在 Code Editor(代碼編輯器)中打開(kāi) Installer 類模塊,并使用上一步中復(fù)制的值替換 appname.servername.service。

下一步是為應(yīng)用程序添加一個(gè)安裝程序項(xiàng)目。

添加安裝程序項(xiàng)目

安裝程序項(xiàng)目用于為應(yīng)用程序創(chuàng)建安裝程序。安裝程序項(xiàng)目以 Windows 安裝程序技術(shù)為基礎(chǔ),包含在安裝期間運(yùn)行自定義操作以及自定義安裝用戶界面等多項(xiàng)功能。有關(guān)安裝程序項(xiàng)目的詳細(xì)信息,請(qǐng)參閱 Visual Studio .NET 文檔中的 Deploying Applications and Components(英文)。

添加安裝程序項(xiàng)目

在 File(文件)菜單中,指向 Add Project(添加項(xiàng)目),然后單擊 New Project(新建項(xiàng)目)。

在 Add New Project(添加新項(xiàng)目)對(duì)話框中,選擇 Project Types(項(xiàng)目類型)窗格中的 Setup and Deployment Projects(安裝和部署項(xiàng)目)節(jié)點(diǎn)。

在 Templates(模板)窗格中,選擇 Web Setup Project(Web 安裝程序項(xiàng)目)并單擊 OK(確定)。

該項(xiàng)目將被添加到解決方案中,且 File System Editor(文件系統(tǒng)編輯器)將被打開(kāi)。

在 Properties(屬性)窗口中,選擇 ProductName 屬性并將其名稱設(shè)置為與應(yīng)用程序的名稱相同。

在 File System Editor(文件系統(tǒng)編輯器)中,選擇 Web Application Folder(Web 應(yīng)用程序文件夾)。

在 Action(操作)菜單中,指向 Add(添加),然后單擊 Project Output(項(xiàng)目輸出)。

在 Add Project Output Group(添加項(xiàng)目輸出組)對(duì)話框中,選擇應(yīng)用程序項(xiàng)目,然后選擇 Primary Output(主輸出)和 Content Files(內(nèi)容文件),并單擊 OK(確定)。

下一步是添加將在安裝結(jié)束時(shí)運(yùn)行的自定義操作。

將 Installer 類添加為自定義操作

自定義操作用于在安裝結(jié)束時(shí)運(yùn)行代碼,以便執(zhí)行安裝過(guò)程中無(wú)法處理的操作。自定義操作的代碼可以包含在 .dll 文件、.exe 文件、腳本文件或程序集文件中。有關(guān)自定義操作的詳細(xì)信息,請(qǐng)參閱 Visual Studio .NET 文檔中的 Custom Actions Management in Deployment(英文)。

將 Installer 類添加為自定義操作

在 Solution Explorer(解決方案資源管理器)中,選擇 Setup Project(安裝程序項(xiàng)目)。

在 View(視圖)菜單中,指向 Editor(編輯器),然后單擊 Custom Actions(自定義操作)。

Custom Actions Editor(自定義操作編輯器)將打開(kāi)。

在 Custom Actions Editor(自定義操作編輯器)中,選擇 Install(安裝)節(jié)點(diǎn)。

在 Action(操作)菜單中,選擇 Add Custom Action(添加自定義操作)。

雙擊 Web Application Folder(Web 應(yīng)用程序文件夾),然后選擇 Primary output(主輸出),并單擊 OK(確定)。

在 Properties(屬性)窗口中,選擇 InstallerClass 屬性并確保將其設(shè)置為 true。

選擇 CustomActionData 屬性并輸入以下文本:/ServerName=[EDITA1] /ServiceName=[EDITA2]

CustomActionData 屬性提供兩個(gè)被傳遞到自定義操作的參數(shù),參數(shù)之間用空格分隔。

下一步是添加用戶界面以便在安裝過(guò)程中輸入信息。

添加用戶界面對(duì)話框

安裝過(guò)程中將顯示用戶界面對(duì)話框以便從用戶收集信息。有關(guān)用戶界面對(duì)話框的詳細(xì)信息,請(qǐng)參閱 Visual Studio .NET 文檔中的 User Interface Management in Deployment(英文)。

添加自定義用戶界面對(duì)話框

在 Solution Explorer(解決方案資源管理器)中,選擇 Setup Project(安裝程序項(xiàng)目)。

在 View(視圖)菜單中,指向 Editor(編輯器),然后單擊 User Interface(用戶界面)。

在 User Interface Editor(用戶界面編輯器)中,選擇 Start(開(kāi)始)節(jié)點(diǎn)。

在 Action(操作)菜單中,選擇 Add Dialog(添加對(duì)話框)。

在 Add Dialog(添加對(duì)話框)對(duì)話框中,選擇 Textboxes (A)(文本框 [A])對(duì)話框,然后單擊 OK(確定)。

在 Action(操作)菜單中,選擇 Move Up(上移)并重復(fù)執(zhí)行該操作,直到 Textboxes (A)(文本框 [A])對(duì)話框位于 Installation Address(安裝地址)對(duì)話框的上方。

在 Properties(屬性)窗口中,設(shè)置以下屬性:

屬性 BannerText 輸入服務(wù)器名稱和服務(wù)名稱 Edit1Label 服務(wù)器名稱: Edit1Value Localhost

注意:此值指定默認(rèn)服務(wù)器。您可以在此處輸入自己的默認(rèn)服務(wù)器名稱。
Edit2Label 服務(wù)名稱: Edit2Value <服務(wù)的名稱> Edit3Visible false Edit4Visible false

注意:Edit1Property 屬性被設(shè)置為“EDITA1”,Edit2Property 屬性被設(shè)置為“EDITA2”。這些值與在 Custom Actions Editor(自定義操作編輯器)的 CustomActionData 屬性中輸入的值相對(duì)應(yīng)。如果用戶在安裝期間在這些編輯控件中輸入文本,CustomActionData 屬性將自動(dòng)傳遞這些值。

生成和安裝

最后一步是生成安裝程序項(xiàng)目以創(chuàng)建安裝程序,然后將應(yīng)用程序安裝到目標(biāo)服務(wù)器上。

生成安裝程序項(xiàng)目

在 Build(生成)菜單中,選擇 Build Projectname(生成 Projectname),其中 Projectname 是您的安裝程序項(xiàng)目的名稱。

將應(yīng)用程序部署到開(kāi)發(fā)計(jì)算機(jī)的 Web 服務(wù)器上

在 Solution Explorer(解決方案資源管理器)中,選擇安裝程序項(xiàng)目,然后在 Project(項(xiàng)目)菜單中選擇 Install(安裝)。

將應(yīng)用程序部署到其他計(jì)算機(jī)的 Web 服務(wù)器上

在 Windows 資源管理器中,瀏覽到項(xiàng)目目錄,并找到生成的安裝程序。默認(rèn)路徑為 Documents and settings您的登錄名安裝程序項(xiàng)目名項(xiàng)目配置產(chǎn)品名.msi。默認(rèn)的項(xiàng)目配置為 Debug。

將目錄中的 .msi 文件以及所有其他文件和子目錄都復(fù)制到 Web 服務(wù)器。

在 Web 服務(wù)器上,雙擊 Setup.exe 文件以運(yùn)行安裝程序。

總結(jié)

我們可以看出,重定向應(yīng)用程序以使用不同的 XML Web services 的過(guò)程并不難。雖然本例使用以 XML Web services 為目標(biāo)的 Web 應(yīng)用程序,但您可以輕松地將其更改為用于 Windows 應(yīng)用程序:只需要使用 app.config 文件代替 Web.config 文件,并使用安裝程序項(xiàng)目代替 Web 安裝程序項(xiàng)目。除此以外,過(guò)程完全相同。

本文介紹了幾項(xiàng)新技術(shù):使用 URL Behavior 屬性在配置文件中存儲(chǔ)信息,使用 Installer 類在安裝期間執(zhí)行操作,以及使用 CustomActionData 屬性在安裝過(guò)程中存儲(chǔ)用戶信息。

發(fā)布:2007-03-25 10:34    編輯:泛普軟件 · xiaona    [打印此頁(yè)]    [關(guān)閉]
相關(guān)文章:
上海OA系統(tǒng)
聯(lián)系方式

成都公司:成都市成華區(qū)建設(shè)南路160號(hào)1層9號(hào)

重慶公司:重慶市江北區(qū)紅旗河溝華創(chuàng)商務(wù)大廈18樓

咨詢:400-8352-114

加微信,免費(fèi)獲取試用系統(tǒng)

QQ在線咨詢