深蓝海域KMPRO

在安装期间将应用程序重定向到不同的XML Web services

2002-09-17 09:27

在安装期间将应用程序重定向到不同的XML Web services


Steve Hoag

Visual Studio Team

Microsoft Corporation

2001 年 11 月

摘要:本文介绍了如何在 Visual Basic? .NET 中创建一个 Web 应用程序,通过使用 URL Behavior 属性、Installer 类和 Web 安装程序项目将该应用程序重定向到不同的 XML Web services。

简介

在开发以 XML Web services 为目标的应用程序时,通常应该以 Web 服务器上已安装的 XML Web services 为目标。这是一个准则,不过在部署应用程序的产品版本时,有时也需要以其他 XML Web services 为目标。例如,您可能已将开发服务器上的 XML Web services 的测试版本作为目标,但是完成的应用程序需要将另一个服务器上的 XML Web services 的安装版本作为目标。您可能还希望安装该应用程序的人员在安装期间可以选择 XML Web services 的版本,例如,Intranet 上的版本或者是可以从防火墙外部进行访问的版本。

本文介绍了如何创建可以重定向到不同的 XML Web services 的 Web 应用程序。创建过程包括:

指定 URL Behavior 属性,以在运行时查找 XML Web services。

添加能在安装结束时执行自定义操作的安装组件。

使用安装程序项目为应用程序创建一个包含自定义用户界面的安装程序。

第一步是创建包含对 XML Web services 进行 Web 引用的 Web 应用程序。有关创建 Web 应用程序的详细信息,请参阅 Visual Studio? .NET 文档中的 Walkthrough: Creating an XML Web services Using Visual Basic or Visual C#(英文)。

将 URL Behavior 设置为 Dynamic

为了在运行时查找 XML Web services,应用程序将存储该 XML Web services 的 URL。Web 引用(用于 XML Web services)的 URL Behavior 属性决定 URL 的存储位置。如果 URL Behavior 属性被设置为 Static(默认值),则 URL 将被硬编码为 Web 引用的一部分。如果 URL Behavior 属性被设置为 Dynamic,则指定 URL 的条目将被添加到该应用程序的 Web.config 文件的 appSettings 段。

将 URL Behavior 属性设置为 Dynamic

在 Solution Explorer(解决方案资源管理器)中,展开 Web References(Web 引用)节点并选择对 XML Web services 的引用。

在 Properties(属性)窗口中,选择 URL Behavior 属性并将其更改为 Dynamic。

在 Solution Explorer(解决方案资源管理器)中,选择 Web.config 文件并双击以打开该文件。

在该文件末尾,应该能够找到一个 段,其中包含指定 XML Web services 名称的关键字和指定 URL 的值。例如,对于能够访问本地计算机上的 MyWebService 的名为 MyWebApp 的应用程序,其外观类似于:


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

下一步是添加 Installer 类,用于在安装期间修改 .config 文件。

添加 Installer 类

Installer 类(也称为安装组件)是在安装过程中被当作自定义操作调用的 .NET 框架类。在这种情况下,您需要添加 Installer 类来代替 Install 方法,以添加修改 .config 文件的代码。有关 Installer 类的详细信息,请参阅 Visual Studio .NET 文档中的“Introduction to Installation Components”。

添加 Installer 类

在 Project(项目)菜单中,选择 Add New Item(添加新项)。

在 Add New Item(添加新项)对话框中,选择 Installer Class(Installer 类)并将 Name(名称)更改为 WebServiceInstaller。

单击 Open(打开)后,该类将被添加到您的项目,并打开包含 Installer 类的设计器。

双击设计器以打开 Code Editor(代码编辑器)。

在 Installer 类模块(位于 End Class 声明的上面)的底部添加用于 Install 方法的以下代码:

Public Overrides Sub Install(ByVal stateSaver As
System.Collections.IDictionary)
' 获取在 CustomActionData 中传递的参数。
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("开始编辑配置文件")

If ProvidedName = "" Or SvcName = "" Then
Throw New InstallException("未指定参数")
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)

' 找到正确的节点并将其更改为新值。
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”应当被替换为
' Web service 文件的实际名称。
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

' 编写新的配置文件。
XmlDocument.Save(FileInfo.FullName)

Finally
installlog.WriteLine("结束对配置文件的编辑")
installlog.Close()
End Try

End Sub

以上代码首先创建用于记录自定义操作进度的安装日志文件。System.Reflection 命名空间用于查找所安装的程序集并查找关联的 .config 文件。XML 文档模型用于遍历 .config 文件,直至找到 appSettings 段。找到关键字 appname.servername.service 后,其关联值将发生更改以包含传入的参数,从而将应用程序重定向为使用新的 XML Web services。

在 Solution Explorer(解决方案资源管理器)中,选择 Web.config 文件并双击以打开该文件。

在 appSettings 段中复制 XML Web services 的关键字值。关键字的形式为 appname.servername.service,其中 appname 是应用程序的名称,servername 是 XML Web services 所在的服务器,service 是 XML Web services 的名称。

在 Code Editor(代码编辑器)中打开 Installer 类模块,并使用上一步中复制的值替换 appname.servername.service。

下一步是为应用程序添加一个安装程序项目。

添加安装程序项目

安装程序项目用于为应用程序创建安装程序。安装程序项目以 Windows 安装程序技术为基础,包含在安装期间运行自定义操作以及自定义安装用户界面等多项功能。有关安装程序项目的详细信息,请参阅 Visual Studio .NET 文档中的 Deploying Applications and Components(英文)。

添加安装程序项目

在 File(文件)菜单中,指向 Add Project(添加项目),然后单击 New Project(新建项目)。

在 Add New Project(添加新项目)对话框中,选择 Project Types(项目类型)窗格中的 Setup and Deployment Projects(安装和部署项目)节点。

在 Templates(模板)窗格中,选择 Web Setup Project(Web 安装程序项目)并单击 OK(确定)。

该项目将被添加到解决方案中,且 File System Editor(文件系统编辑器)将被打开。

在 Properties(属性)窗口中,选择 ProductName 属性并将其名称设置为与应用程序的名称相同。

在 File System Editor(文件系统编辑器)中,选择 Web Application Folder(Web 应用程序文件夹)。

在 Action(操作)菜单中,指向 Add(添加),然后单击 Project Output(项目输出)。

在 Add Project Output Group(添加项目输出组)对话框中,选择应用程序项目,然后选择 Primary Output(主输出)和 Content Files(内容文件),并单击 OK(确定)。

下一步是添加将在安装结束时运行的自定义操作。

将 Installer 类添加为自定义操作

自定义操作用于在安装结束时运行代码,以便执行安装过程中无法处理的操作。自定义操作的代码可以包含在 .dll 文件、.exe 文件、脚本文件或程序集文件中。有关自定义操作的详细信息,请参阅 Visual Studio .NET 文档中的 Custom Actions Management in Deployment(英文)。

将 Installer 类添加为自定义操作

在 Solution Explorer(解决方案资源管理器)中,选择 Setup Project(安装程序项目)。

在 View(视图)菜单中,指向 Editor(编辑器),然后单击 Custom Actions(自定义操作)。

Custom Actions Editor(自定义操作编辑器)将打开。

在 Custom Actions Editor(自定义操作编辑器)中,选择 Install(安装)节点。

在 Action(操作)菜单中,选择 Add Custom Action(添加自定义操作)。

双击 Web Application Folder(Web 应用程序文件夹),然后选择 Primary output(主输出),并单击 OK(确定)。

在 Properties(属性)窗口中,选择 InstallerClass 属性并确保将其设置为 true。

选择 CustomActionData 属性并输入以下文本:/ServerName=[EDITA1] /ServiceName=[EDITA2]

CustomActionData 属性提供两个被传递到自定义操作的参数,参数之间用空格分隔。

下一步是添加用户界面以便在安装过程中输入信息。

添加用户界面对话框

安装过程中将显示用户界面对话框以便从用户收集信息。有关用户界面对话框的详细信息,请参阅 Visual Studio .NET 文档中的 User Interface Management in Deployment(英文)。

添加自定义用户界面对话框

在 Solution Explorer(解决方案资源管理器)中,选择 Setup Project(安装程序项目)。

在 View(视图)菜单中,指向 Editor(编辑器),然后单击 User Interface(用户界面)。

在 User Interface Editor(用户界面编辑器)中,选择 Start(开始)节点。

在 Action(操作)菜单中,选择 Add Dialog(添加对话框)。

在 Add Dialog(添加对话框)对话框中,选择 Textboxes (A)(文本框 [A])对话框,然后单击 OK(确定)。

在 Action(操作)菜单中,选择 Move Up(上移)并重复执行该操作,直到 Textboxes (A)(文本框 [A])对话框位于 Installation Address(安装地址)对话框的上方。

在 Properties(属性)窗口中,设置以下属性:

属性
BannerText 输入服务器名称和服务名称
Edit1Label 服务器名称:
Edit1Value Localhost
注意:此值指定默认服务器。您可以在此处输入自己的默认服务器名称。
Edit2Label 服务名称:
Edit2Value <服务的名称>
Edit3Visible false
Edit4Visible false

注意:Edit1Property 属性被设置为“EDITA1”,Edit2Property 属性被设置为“EDITA2”。这些值与在 Custom Actions Editor(自定义操作编辑器)的 CustomActionData 属性中输入的值相对应。如果用户在安装期间在这些编辑控件中输入文本,CustomActionData 属性将自动传递这些值。

生成和安装

最后一步是生成安装程序项目以创建安装程序,然后将应用程序安装到目标服务器上。

生成安装程序项目

在 Build(生成)菜单中,选择 Build Projectname(生成 Projectname),其中 Projectname 是您的安装程序项目的名称。

将应用程序部署到开发计算机的 Web 服务器上

在 Solution Explorer(解决方案资源管理器)中,选择安装程序项目,然后在 Project(项目)菜单中选择 Install(安装)。

将应用程序部署到其他计算机的 Web 服务器上

在 Windows 资源管理器中,浏览到项目目录,并找到生成的安装程序。默认路径为 \Documents and settings\您的登录名\安装程序项目名\项目配置\产品名.msi。默认的项目配置为 Debug。

将目录中的 .msi 文件以及所有其他文件和子目录都复制到 Web 服务器。

在 Web 服务器上,双击 Setup.exe 文件以运行安装程序。

总结

我们可以看出,重定向应用程序以使用不同的 XML Web services 的过程并不难。虽然本例使用以 XML Web services 为目标的 Web 应用程序,但您可以轻松地将其更改为用于 Windows 应用程序:只需要使用 app.config 文件代替 Web.config 文件,并使用安装程序项目代替 Web 安装程序项目。除此以外,过程完全相同。

本文介绍了几项新技术:使用 URL Behavior 属性在配置文件中存储信息,使用 Installer 类在安装期间执行操作,以及使用 CustomActionData 属性在安装过程中存储用户信息。

相关推荐