摘要:本文介绍了如何在 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 应用程序。创建过程包括:
第一步是创建包含对 XML Web services 进行 Web 引用的 Web 应用程序。有关创建 Web 应用程序的详细信息,请参阅 Visual Studio® .NET 文档中的 Walkthrough: Creating an XML Web services Using Visual Basic or Visual C#(英文)。
为了在运行时查找 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
在该文件末尾,应该能够找到一个 <appSettings>
段,其中包含指定 XML Web services 名称的关键字和指定 URL 的值。例如,对于能够访问本地计算机上的 MyWebService 的名为 MyWebApp 的应用程序,其外观类似于:
<appSettings><add key="MyWebApp.localhost.Service1"
value=http://localhost/MyWebService/Service1.asmx/></appSettings>
下一步是添加 Installer 类,用于在安装期间修改 .config 文件。
Installer 类(也称为安装组件)是在安装过程中被当作自定义操作调用的 .NET 框架类。在这种情况下,您需要添加 Installer 类来代替 Install 方法,以添加修改 .config 文件的代码。有关 Installer 类的详细信息,请参阅 Visual Studio .NET 文档中的“Introduction to Installation Components”。
添加 Installer 类
单击 Open(打开)后,该类将被添加到您的项目,并打开包含 Installer 类的设计器。
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。
appSettings
段中复制 XML Web services 的关键字值。关键字的形式为 appname.servername.service,其中 appname 是应用程序的名称,servername 是 XML Web services 所在的服务器,service 是 XML Web services 的名称。 appname.servername.service
。 下一步是为应用程序添加一个安装程序项目。
安装程序项目用于为应用程序创建安装程序。安装程序项目以 Windows 安装程序技术为基础,包含在安装期间运行自定义操作以及自定义安装用户界面等多项功能。有关安装程序项目的详细信息,请参阅 Visual Studio .NET 文档中的 Deploying Applications and Components(英文)。
添加安装程序项目
该项目将被添加到解决方案中,且 File System Editor(文件系统编辑器)将被打开。
下一步是添加将在安装结束时运行的自定义操作。
自定义操作用于在安装结束时运行代码,以便执行安装过程中无法处理的操作。自定义操作的代码可以包含在 .dll 文件、.exe 文件、脚本文件或程序集文件中。有关自定义操作的详细信息,请参阅 Visual Studio .NET 文档中的 Custom Actions Management in Deployment(英文)。
将 Installer 类添加为自定义操作
Custom Actions Editor(自定义操作编辑器)将打开。
CustomActionData 属性提供两个被传递到自定义操作的参数,参数之间用空格分隔。
下一步是添加用户界面以便在安装过程中输入信息。
安装过程中将显示用户界面对话框以便从用户收集信息。有关用户界面对话框的详细信息,请参阅 Visual Studio .NET 文档中的 User Interface Management in Deployment(英文)。
添加自定义用户界面对话框
属性 | 值 |
---|---|
BannerText | 输入服务器名称和服务名称 |
Edit1Label | 服务器名称: |
Edit1Value | Localhost
注意:此值指定默认服务器。您可以在此处输入自己的默认服务器名称。 |
Edit2Label | 服务名称: |
Edit2Value | <服务的名称> |
Edit3Visible | false |
Edit4Visible | false |
注意:Edit1Property 属性被设置为“EDITA1”,Edit2Property 属性被设置为“EDITA2”。这些值与在 Custom Actions Editor(自定义操作编辑器)的 CustomActionData 属性中输入的值相对应。如果用户在安装期间在这些编辑控件中输入文本,CustomActionData 属性将自动传递这些值。
最后一步是生成安装程序项目以创建安装程序,然后将应用程序安装到目标服务器上。
生成安装程序项目
将应用程序部署到开发计算机的 Web 服务器上
将应用程序部署到其他计算机的 Web 服务器上
我们可以看出,重定向应用程序以使用不同的 XML Web services 的过程并不难。虽然本例使用以 XML Web services 为目标的 Web 应用程序,但您可以轻松地将其更改为用于 Windows 应用程序:只需要使用 app.config 文件代替 Web.config 文件,并使用安装程序项目代替 Web 安装程序项目。除此以外,过程完全相同。
本文介绍了几项新技术:使用 URL Behavior 属性在配置文件中存储信息,使用 Installer 类在安装期间执行操作,以及使用 CustomActionData 属性在安装过程中存储用户信息。