深蓝海域KMPRO

如何使用Visual Studio .NET和Office XP创建和部署XML Web Service

2002-09-11 14:22

如何使用Visual Studio .NET和Office XP创建和部署XML Web Service


Frank C. Rice

Microsoft Corporation

2002 年 5 月

适用于:
    
Microsoft? Visual Studio? .NET
    
Microsoft Access 2002
    
Microsoft Office XP Web Services Toolkit

摘要:学习如何创建和部署用 Microsoft Visual Studio .NET 创建的 XML Web Service 示例。使用 Microsoft Access 2002 窗体来访问 XML Web Service。

简介

XML Web Service 为应用程序提供了一种交换数据和处理功能的方法。通常,XML Web Service 是一个存放在 Web 服务器上的动态链接库 (DLL),可以通过 Internet 调用其方法。在此方案中,客户端应用程序通过使用超文本传输协议 (HTTP) 发送和接收 SOAP 消息,与 XML Web Service 进行通信。

在本文中,我们将示范如何使用 Microsoft? Visual Studio? .NET 来创建、部署和访问 XML Web Service。首先,我们在提供 XML Web Service 的 Web 服务器上设置 Internet Information Server (IIS)。

注意:IIS 4.0 与 Microsoft Windows NT ? 4.0 Server 兼容。IIS 5.0 与 Windows? 2000 Server 兼容,并且在默认情况下与 Windows? 2000 Server 一起安装。

然后,使用 Visual Studio .NET 创建一个 ASP.NET Web Service 项目。接着,向项目中添加代码来实现 XML Web Service。我们的 XML Web Service 示例接受美国各州的两个字符的州名缩写,并返回有关该州的信息,包括该州的全名、首府、加入联邦的日期及其加入顺序。随后,我们将在 Visual Studio .NET 中测试 XML Web Service。最后,用 Microsoft Access 2002 窗体创建客户端应用程序来访问该 XML Web Service 并显示结果。

XML Web Service 概述

那么,创建和使用 XML Web Service 要涉及到哪些操作呢?通常,用户可能需要先导航到提供 XML Web Service 注册(如通用说明、发现和集成 [UDDI] 注册服务)的 Web 站点,查看可用的 XML Web Service。注册服务将提供各种可用 XML Web Service 的信息,例如:提供 XML Web Service 的公司名称,公司 Web 站点的 URL 地址,以及用户用来确定 XML Web Service 详细信息的 WSDL 文件位置。

然后,开发人员使用从 WSDL 文件收集的信息来开发客户端应用程序,以便访问 XML Web Service 并处理结果。开发人员首先需要设置对 Microsoft SOAP 库 (mssoap1.dll) 的引用。Microsoft SOAP 库 (mssoap1.dll) 可以通过安装 SOAP Toolkit 2.0 获得。

注意:Microsoft SOAP Toolkit 2.0 SP2(英文)可从 MSDN 下载。

Microsoft SOAP 库包含使应用程序能够调用 XML Web Service 方法的客户端(和服务器端)组件。然后,开发人员将设置对 WSDL 文件的 Web 引用(使用 Web Service 引用工具)。

注意:Web Service 引用工具包含在可以从 MSDN 下载的 Office XP Web Services Toolkit(英文)中。

Web Service 引用工具会创建代理类(XML Web Service 在客户端应用程序中的本地表示形式),这样就更容易使用 HTTP 与 XML Web Service 通信。通信由来自客户端应用程序的 SOAP 请求和来自 XML Web Service 的 SOAP 响应组成。实现 XML Web Service 的服务器将使用“侦听器”(包含在用于实现处理程序的 WSDL 文件和 Active Server Page (ASP) 文件中的代码)接收和分析 SOAP 请求。一旦侦听器探测到来自客户端应用程序的 SOAP 请求,它就会分析该请求,通过传递任一参数调用 XML Web Service 方法,然后接收方法调用的结果。接着,侦听器将响应包装在另一个 SOAP 消息中,并将其发送给客户端应用程序,最后由客户端组件分析和处理该结果。

至此,我们就看到了如何在客户端使用 XML Web Service。要在 Web 服务器上创建和实现 XML Web Service,需要以下组件:

一个 DLL,该 DLL 包含能象 XML Web Service 一样提供的函数(方法)。

一种方法,通过该方法可以向需要使用 XML Web Service 的客户端通告所提供的功能、方法的名称、所使用的输入/输出参数以及与 XML Web Service 相关的其他信息。这些信息由 WSDL 文件提供。

要使用 XML Web Service,您需要做的只是创建客户端应用程序以便使用 WSDL 文件中包含的信息来访问 XML Web Service,以及确保在每个客户端计算机上安装 Microsoft SOAP 库。其他可能需要的工具取决于用来创建客户端的开发环境。

Visual Studio .NET 中的 XML Web Service

Microsoft Visual Studio .NET 通过自动创建许多实现 XML Web Service 时所需的文件来简化创建和部署 XML Web Service 的任务。例如,Visual Studio .NET 提供了 ASP.NET Web Service 项目类型来帮助您创建和使用 XML Web Service。

在创建 ASP.NET Web Service 项目时,Visual Studio .NET 自动构造在 Web 服务器(假设正在 Web 服务器上开发 XML Web Service)上实现 XML Web Service 所需的项目和文件。例如,Visual Studio .NET 自动创建一个 .asmx 文件,以便包含向 XML Web Service 添加功能的类和方法。

注意:除了 Web 类前面带有 [WebMethod] 属性以外,XML Web Service 类与标准类相似。

另外,Visual Studio .NET 会自动创建 WSDL 和 WSML 文件,甚至会提供显示 XML Web Service 中使用的方法和参数的信息页。您也可以使用此页测试 XML Web Service。

在客户端,可以使用 Microsoft Visual Basic? 6.0、Visual Studio .NET 或 Office 应用程序(例如 Access 或 Microsoft Excel)来创建使用 XML Web Service 的客户端应用程序。首先,需要设置对 WSDL 文件的引用。在 Visual Studio .NET 中实现的 XML Web Service 中,通过查询字符串(例如,http://localhost/StatesInformationWS/StatesInformation.asmx?wsdl)来引用 .asmx 文件,从而实现对 WSDL 文件的引用。在 Visual Basic 或 Office 应用程序中,则通过使用 Web Service 引用工具来设置对 WSDL 文件的 Web 引用。Web Service 引用工具包含在可以从 MSDN 下载的 Office XP Web Services Toolkit(英文)中。

然后,Web Service 引用工具就会获取 WSDL 文件中的信息,并创建 Microsoft Visual Basic for Applications (VBA) 代理类。代理类提供 XML Web Service 在客户端应用程序中的本地表示形式。另外,因为 XML Web Service 类与客户端应用程序中的代理连接,所以在客户端创建对象时可以使用 Microsoft IntelliSense?。然后,向调用代理类中的方法的应用程序添加代码。这样,就可以开始使用 XML Web Service 了。

现在,让我们用这些信息来使用和创建 XML Web Service。

创建 XML Web Service

要部署 XML Web Service,需要有一个 Web 服务器,例如运行 IIS 的 Microsoft Windows? 2000 Server。然后,需要在 Web 服务器上设置一个虚拟根(也称为“虚拟目录”),以便存储创建的 XML Web Service 文件。

设置 Internet Information Server

向 Web 服务器添加一个文件夹。可以在服务器上使用现有的文件夹或创建一个新文件夹。对于本示例,建议创建一个新文件夹(例如,C:\StatesInfoWS)。

然后,在 IIS 中设置一个虚拟根。在控制面板中,双击“管理工具”,然后双击“Internet 服务管理器”,即显示 Internet 信息服务控制台。
在左侧窗格中,展开包括您的 Web 服务器的节点,右键单击“默认 Web 站点”节点,指向“New”,然后单击“虚拟目录”。这会打开虚拟目录向导。

在“欢迎使用虚拟目录创建向导”屏幕中,单击“下一步”。

在“虚拟目录别名”屏幕中,键入 StatesInfoWS,然后单击“下一步”。

在“Web 站点内容目录”屏幕中,键入步骤 1 中创建的文件夹的路径,然后单击“下一步”。

在“访问权限”屏幕中,选择“读取”和“运行脚本”复选框,然后单击“下一步”。单击“完成”。

创建 ASP.NET 项目

现在,我们要用 GetStateInfo 方法创建名为 StatesInformationWS 的新 Visual Basic .NET ASP.NET Web Service 项目和名为 StatesInformation 的类模块。

启动 Visual Studio .NET。在开始页面上,单击 New Project(新建项目)。

在 New Project(新建项目)对话框中,在 Project Types(项目类型)列表中选择 Visual Basic Projects(Visual Basic 项目),然后单击 ASP.NET Web Service。

在 Location(位置)框中,键入
http://localhost/StatesInfoWS。请注意,在默认情况下,所有的 XML Web Service 项目都保存在 Web 服务器的 localhost 虚拟目录下。

单击 OK(确定)。该项目将包含一个名为 Service1.asmx 的模块、一个配置文件和一个发现文件 (.vsdisco)。其中,配置文件包含有关 Web 服务器的配置信息,发现文件包含的信息使与您的服务器连接的其他应用程序能够定位您的 XML Web Service 并查看其成员的名称和语法。
因为在下一步骤中您将创建自己的文件,所以请先删除 Service1.asmx 模块。请选择该文件,单击鼠标右键,再单击 Delete(删除),然后在确认对话框中单击 OK(确定)。

现在添加自己的 .asmx 文件。在 Solution Explorer(解决方案资源管理器)中,右键单击 StatesInformationWS,选择 Add(添加),然后选择 Add New Item(添加新项)。

在 Add New Item(添加新项)对话框的 Web Project Item(Web 项目项)下,选择 Web Service 图标,然后键入 StatesInformation.asmx。单击 OK(确定)。

右键单击 StatesInformation.asmx,然后选择 View Code(查看代码)。

在 Web Services Designer Generated Code(Web Service 设计器生成的代码)语句下面添加以下代码。这些代码是用于向您的 XML Web Service 添加功能的方法:

<WebMethod()> Public Function GetStateInfo(ByVal strAbbreviatedName
        
As String) As String
   
' 目的:此过程用于模拟 XML Web Service。
   
'       此过程接受两个字符的州名缩写,
   
'       并返回有关该州的信息。
  
  ' 接受:strAbbreviatedName - 两个字符的
  
  '       州名缩写。
  
  ' 返回:有关该州的信息,包括全称、首府、
   
'       加入联邦的日期及其加入顺序。
   
'
   
Select Case UCase(Trim(strAbbreviatedName))
       
Case "AL"
           
Return "Name: Alabama " & _
               
"Capital: Montgomery " & _
               
"Admitted: December 14, 1819 " & _
               
"Order: 22"
      
  Case "AK"
           
Return "Name: Alaska " & _
               
"Capital: Juneau " & _
               
"Admitted: January 3, 1959 " & _
               
"Order: 49"
       
Case "AZ"
           
Return "Name: Arizona " & _
               
"Capital: Phoenix " & _
               
"Admitted: February 14, 1912 " & _
               
"Order: 48"
       
Case "AR"
           
Return "Name: Arkansas " & _
               
"Capital: Little_Rock " & _
               
"Admitted: June 15, 1836 " & _
               
"Order: 25"
      
  Case "CA"
           
Return "Name: California " & _
               
"Capital: Sacramento " & _
               
"Admitted: September 9, 1850 " & _
               
"Order: 31"
       
Case "CO"
           
Return "Name: Colorado " & _
               
"Capital: Denver " & _
               
"Admitted: August 1, 1876 " & _
               
"Order: 38"
       
Case "CT"
           
Return "Name: Connecticut " & _
               
"Capital: Hartford " & _
               
"Admitted: January 9, 1788 " & _
               
"Order: 5"
       
Case "DC"
          
  Return "Name: District_of_Columbia " & _
               
"Capital: Not_Applicable " & _
              
  "Admitted: N/A " & _
               
"Order: N/A"
       
Case "DE"
           
Return "Name: Delaware " & _
               
"Capital: Dover " & _
               
"Admitted: December 7, 1787 " & _
               
"Order: 1"
       
Case "FL"
           
Return "Name: Florida " & _
               
"Capital: Tallahassee " & _
               
"Admitted: March 3, 1845 " & _
               
"Order: 27"
       
Case "GA"
           
Return "Name: Georgia " & _
               
"Capital: Atlanta " & _
               
"Admitted: January 2, 1788 " & _
               
"Order: 4"
       
Case "HI"
           
Return "Name: Hawaii " & _
               
"Capital: Honolulu " & _
               
"Admitted: August 21, 1959 " & _
               
"Order: 50"
       
Case "ID"
           
Return "Name: Idaho " & _
               
"Capital: Boise " & _
               
"Admitted: July 3, 1890 " & _
               
"Order: 43"
       
Case "IL"
           
Return "Name: Illinois " & _
               
"Capital: Springfield " & _
               
"Admitted: Decemer 3, 1818 " & _
               
"Order: 21"
       
Case "IN"
           
Return "Name: Indiana " & _
               
"Capital: Indianapolis " & _
               
"Admitted: December 11, 1816 " & _
              
  "Order: 19"
       
Case "IA"
           
Return "Name: Iowa " & _
               
"Capital: Des_Moines " & _
               
"Admitted: December 28, 1846 " & _
               
"Order: 29"
       
Case "KS"
           
Return "Name: Kansas " & _
               
"Capital: Topeka " & _
               
"Admitted: January 29, 1861 " & _
              
  "Order: 34"
      
  Case "KY"
           
Return "Name: Kentucky " & _
              
  "Capital: Frankfort " & _
               
"Admitted: June 1, 1792 " & _
               
"Order: 15"
       
Case "LA"
           
Return "Name: Louisiana " & _
               
"Capital: Baton_Rouge " & _
               
"Admitted: April 30, 1812 " & _
               
"Order: 18"
      
  Case "ME"
           
Return "Name: Maine " & _
              
  "Capital: Augusta " & _
              
  "Admitted: March 15, 1820 " & _
               
"Order: 23"
       
Case "MD"
           
Return "Name: Maryland " & _
              
  "Capital: Annapolis " & _
               
"Admitted: April 28, 1788 " & _
               
"Order: 7"
       
Case "MA"
           
Return "Name: Massachesetts " & _
               
"Capital: Boston " & _
               
"Admitted: February 6, 1788 " & _
               
"Order: 6"
       
Case "MI"
           
Return "Name: Michigan " & _
               
"Capital: Lansing " & _
               
"Admitted: Jan 26, 1837 " & _
               
"Order: 26"
     
Case "MN"
           
Return "Name: Minnesota " & _
               
"Capital: St._Paul " & _
               
"Admitted: May 11, 1858 " & _
               
"Order: 32"
       
Case "MS"
           
Return "Name: Mississippi " & _
               
"Capital: Jackson " & _
               
"Admitted: December 10, 1817 " & _
               
"Order: 20"
       
Case "MO"
           
Return "Name: Missouri " & _
               
"Capital: Jefferson_City " & _
               
"Admitted: August 10, 1821 " & _
               
"Order: 24"
       
Case "MT"
           
Return "Name: Montana " & _
               
"Capital: Helena " & _
               
"Admitted: November 8, 1889 " & _
               
"Order: 41"
       
Case "NE"
           
Return "Name: Nebraska " & _
               
"Capital: Lincoln " & _
               
"Admitted: March 1, 1867 " & _
               
"Order: 37"
       

Case "NV"
           
Return "Name: Nevada " & _
               
"Capital: Carson_City " & _
               
"Admitted: October 31, 1864 " & _
               
"Order: 36"
       
Case "NH"
           
Return "Name: New_Hampshire " & _
              
  "Capital: Concord " & _
              
  "Admitted: June 21, 1788 " & _
               
"Order: 9"
       
Case "NJ"
          
Return "Name: New_Jersey " & _
               
"Capital: Trenton " & _
               
"Admitted: December 18, 1787 " & _
               
"Order: 3"
       
Case "NM"
           
Return "
Name: New_Mexico " & _
               
"Capital: Santa_Fe " & _
               
"Admitted: January 6, 1912 " & _
             
   "Order: 47"
       
Case "NY"
           
Return "Name: New_York " & _
               
"Capital: Albany " & _
               
"Admitted: July 26, 1788 " & _
               
"Order: 11"
       
Case "NC"
           
Return "Name: North_Carolina " & _
               
"Capital: Raleigh " & _
               
"Admitted: November 21, 1789 " & _
               
"Order: 12"
       
Case "ND"
           
Return "Name: North_Dakota " & _
               
"Capital: Bismarck " & _
               
"Admitted: November 2, 1889 " & _
               
"Order: 39"
       
Case "OH"
           
Return "Name: Ohio " & _
               
"Capital: Columbus " & _
               
"Admitted: March 1, 1803 " & _
               
"Order: 17"
       
Case "OK"
           
Return "Name: Oklahoma " & _
               
"Capital: Oklahoma_City " & _
               
"Admitted: November 16, 1907 " & _
              
  "Order: 46"
       
Case "OR"
           
Return "Name: Oregon " & _
               
"Capital: Salem " & _
               
"Admitted: February 14, 1859 " & _
               
"Order: 33"
       
Case "PA"
           
Return "Name: Pennsylvania " & _
               
"Capital: Harrisburg " & _
               
"Admitted: December 12, 1787 " & _
               
"Order: 2"
       
Case "RI"
           
Return "Name: Rhode_Island " & _
               
"Capital: Providence " & _
               
"Admitted: May 29, 1790 " & _
               
"Order: 13"
       
Case "SC"
           
Return "Name: South_Carolina " & _
               
"Capital: Columbia " & _
               
"Admitted: May 23, 1788 " & _
              
  "Order: 8"
       
Case "SD"
           
Return "Name: South_Dakota " & _
              
  "Capital: Pierre " & _
               
"Admitted: November 2, 1889 " & _
               
"Order: 40"
       
Case "TN"
           
Return "Name: Tennessee " & _
               
"Capital: Nashville " & _
               
"Admitted: June 1, 1796 " & _
              
  "Order: 16"
       
Case "TX"
           
Return "Name: Texas " & _
              
  "Capital: Austin " & _
               
"Admitted: December 28, 1846 " & _
               
"Order: 29"
       
Case "UT"
           
Return "Name: Utah " & _
               
"Capital: Salt_Lake_City " & _
               
"Admitted: January 4, 1896 " & _
               
"Order: 45"
       
Case "VT"
           
Return "Name: Vermont " & _
               
"Capital: Montpelier " & _
               
"Admitted: March 4, 1791 " & _
               
"Order: 14"
       
Case "VA"
           
Return "Name: Virginia " & _
               
"Capital: Richmond " & _
               
"Admitted: June 25, 1788 " & _
              
  "Order: 10"
       
Case "WA"
           
Return "Name: Washington " & _
               
"Capital: Olympia " & _
               
"Admitted: November 11, 1889 " & _
               
"Order: 42"
       
Case "WV"
           
Return "Name: West_Virginia " & _
               
"Capital: Charleston " & _
               
"Admitted: June 20, 1863 " & _
               
"Order: 35"
       
Case "WI"
           
Return "Name: Wisconsin " & _
            
"Capital: Madison " & _
               
"Admitted: May 29, 1848 " & _
               
"Order: 30"
       
Case "WY"
           
Return "Name: Wyoming " & _
               
"Capital: Cheyenne " & _
               
"Admitted: July 10, 1890 " & _
               
"Order: 44"
       
Case Else
           
Return "您输入的值不是有效的" & _
               
"州名缩写。请输入有效" & _
               
"的两个字符的缩写。"
   
End Select

End Function

现在,开始测试 XML Web Service。在 Project Explorer(项目资源管理器)中,选择 StatesInformation.asmx,单击鼠标右键,然后单击 Set As Start Page(设为开始页面)。按 F5 键。这将开始生成应用程序,并将 .NET 程序集和支持文件复制到 Web 服务器上的虚拟根文件夹下的 \bin 文件夹中。Microsoft Internet Explorer 启动,并且显示新 XML Web Service 的描述。


图 1:Internet Explorer 中显示的 XML Web Service 描述

单击超链接 GetStateInfo 测试该方法。在该页面中,键入两个字符的州名缩写(例如 VA)。


 

图 2:测试 XML Web Service 的 GetStateInfo 方法

单击 Invoke(调用)。结果如图 3 所示。


 

图 3:GetStateInfo 方法的结果

祝贺您!XML Web Service 已经运行,现在您需要创建客户端应用程序。

如果您不在运行 IIS 的 Web 服务器上创建此项目,就需要将其从开发计算机上复制到提供 XML Web Service 的 Web 服务器上(使用设置 Internet Information Server 节的步骤 1 中创建的文件夹),并在服务器上进行注册,操作步骤如下:

在 Project(项目)菜单上,单击 Copy Project(复制项目)。在 Copy Project(复制项目)对话框中,指定 Web 服务器的根目录下的 StatesInfoWS 文件夹,然后单击 OK(确定)。在发现和使用 XML Web Service 时所需的全部文件都将被复制到该文件夹下。
要进行注册,请单击“开始”按钮,指向“运行”,然后键入以下命令(用所复制的 DLL 的绝对路径替换 <path>):
   regsvr32 <path>\StatesInfoWS.dll

创建客户端应用程序

现在将在 Access 2002 中创建一个窗体来调用 XML Web Service 并显示结果。

要在 Access 中创建此应用程序,您需要在“引用”对话框(“工具”菜单)中设置对“Microsoft SOAP 类型库”(mssoap1.dll) 的引用。

启动 Access 2002。

在数据库窗口中,单击“对象”下的“窗体”,然后单击“新建”显示“新建窗体”对话框。

在“新建窗体”对话框中,选择“设计视图”,然后单击“确定”。

在“视图”菜单中,单击“属性”打开该窗体的属性表。

在属性表中,将“标题”属性中的文本改为“从 XML Web Service 获取数据”。

从“工具箱”(“视图”菜单)中将 Text Box 控件拖到窗体中。在属性表中,将“名称”属性改为“txtAbbrevName”。

单击 txtAbbrevName 控件的标签,然后将“标题”属性改为:输入两个字符的州名缩写并单击“获取信息”。

从“工具箱”中将 Command Button 控件拖到窗体中。在“命令按钮向导”屏幕中单击“取消”。在属性表中,将控件的名称改为“cmdGetInfo”。

将 cmdGetInfo 控件的“标题”属性改为“获取信息”。在属性表中,单击“事件”选项卡,单击“On Click”事件,然后单击生成按钮(带有椭圆的 ...)。

在 Visual Basic 编辑器中,首先需要添加一个对 URL 的 Web 引用,该 URL 必须包含对 XML Web Service 中可用方法的描述。在“工具”菜单中,单击“Web Service References”。

在“Web Service References”对话框中,单击“Web Service URL”。在“URL”框中,键入指向 XML Web Service 说明文件的 URL 地址,然后单击“搜索”。对于本例中的 XML Web Service,URL 地址应该是
http://localhost/StatesInformationWS/StatesInformation.asmx?wsdl

在 Search Results(搜索结果)框中选择“StatesInformation”。单击“+”展开节点。通过选择“GetStateInfo”并单击 Test(测试)来测试该方法。


 

图 4:Web Service References 对话框

单击“添加”。将 clsws_StatesInformation 类添加到“类模块”文件夹下。这个类担当代理,用于提供与 XML Web Service 进行交互的接口及提供 XML Web Service 的本地表示形式。

双击 clsws_StatesInformation 类。在滚动显示代码时,您会看到许多由 Web Service 引用工具自动创建的事件过程,例如 Class_Initialize 和 Class_Terminate。您还会看到 wsm_GetStateInfo 函数,它用于调用您创建的 XML Web Service 的 StatesInformation 类中的 GetStateInfo 方法。
双击窗体模块。向 cmdGetInfo_Click 事件过程中添加以下代码:

    ' 目的:该过程用于测试 StatesInformation XML

    '       Web Service 示例,方法是:调用

    '       clsws_StatesInformation 代理类的

    '       wsm_getStateInfo 函数。然后,此方法

    '       调用 XML Web Service 来发送两个字符

    '       的州名缩写并显示返回的信息。

    '
    ' 返回:州的全称、首府、加入联邦的日期和加入

    '       顺序。

    '
    Dim clsStatesWS As clsws_StatesInformation

    Dim strUserInfo As String

    Dim strReturn As String

    Dim strName As String

    Dim strCapital As String

    Dim strDate As String

    Dim strOrder As String

    Dim intStart As Integer

    Dim intEnd As Integer

    Dim intLength As Integer
   
    On Error GoTo cmdGetInfo_Click_Err
   
    ' 创建对 clsws_StatesInformation 类的引用。

    Set clsStatesWS = New clsws_StatesInformation
   
    Me!txtAbbrevName.SetFocus

    strUserInfo = Me!txtAbbrevName.Text
   
    ' 调用 wsm_GetStateInfo 方法。

    strReturn = Trim(clsStatesWS.wsm_GetStateInfo(strUserInfo))
   
    ' 查看是否返回了该州的信息。

    If Left(strReturn, 4) <> "Name" Then

        MsgBox strReturn, , "不是有效的输入项"

        GoTo cmdGetInfo_Click_End

    End If
   
    ' 分析返回的字符串。
   
    ' 获取 Name 字段。

    ' 查找第一个“:”。

    intStart = InStr(1, strReturn, ":") + 2

     ' 查找名称之后的第一个空格。

    intEnd = (InStr(intStart, strReturn, " "))

    ' 要提取的字符数。

    intLength = intEnd - intStart

    strName = Mid(strReturn, intStart, intLength)
    
    ' 查看在单词之间是否有下划线。

    ' 如果有,则在显示之前将其删除。

    If InStr(1, strName, "_") <> 0 Then

        strName = Replace(strName, "_", " ")

    End If
   
    Me!txtName.SetFocus

    Me!txtName.Text = strName
      
    ' 获取 Capital 字段。

    ' 从 Name 字段结束处开始查找

    ' 第二个“:”。

    intStart = InStr(intEnd, strReturn, ":") + 2

    ' 查找日期之后的空格。

    intEnd = (InStr(intStart, strReturn, " "))

    ' 要提取的字符数。

    intLength = intEnd - intStart

    strCapital = Mid(strReturn, intStart, intLength)
   
    ' 查看在单词之间是否有下划线。

    ' 如果有,则在显示之前将其删除。

    If InStr(1, strCapital, "_") <> 0 Then

        strCapital = Replace(strCapital, "_", " ")

    End If
   
    Me!txtCapital.SetFocus

    Me!txtCapital.Text = strCapital
   
    ' 获取 Date 字段。

    intStart = InStr(intEnd, strReturn, ":") + 2

    ' 在日期之后查找逗点并在年份上加 6。

    intEnd = (InStr(intStart, strReturn, ",") + 6)

    ' 要提取的字符数。

    intLength = intEnd - intStart

    strDate = Mid(strReturn, intStart, intLength)
   
    Me!txtDate.SetFocus

    Me!txtDate.Text = strDate
   
    ' 最后,获取该州加入联邦的顺序。

    strOrder = Trim(Right(strReturn, 2))
   
    Me!txtOrder.SetFocus

    Me!txtOrder.Text = strOrder
   
    Me!txtAbbrevName.SetFocus
       
cmdGetInfo_Click_End:

    Exit Sub

cmdGetInfo_Click_Err:

    MsgBox Err.Number & ":" & Err.Description

    GoTo cmdGetInfo_Click_End

关闭 Visual Basic 编辑器。

从“工具箱”中,将四个附加的 Text Box 控件添加到窗体中,放在“获取信息”按钮之下。
双击第一个 Text Box 控件以显示属性表。将控件的名称改为 txtName。

单击该控件的标签并将“标题”属性改为“名称:”。

为其余三个控件重复步骤 18 和 19,更改以下属性:Text Box 控件的“名称”属性 与标签关联的“标题”属性

TxtCapital 首府:

TxtDate 获准日期:

txtOrder 获准顺序:

将一个 Command Button 控件拖到窗体上,放在 txtOrder 控件之下。在“命令按钮向导”页面中,在“类别”列表中选择“窗体操作”,然后在“操作”列表中选择“关闭窗体”。单击“下一步”。

在下一个屏幕中,选择“文本”并将文本改为“关闭”。单击“下一步”。

将控件的名称改为 cmdClose,然后单击“完成”。

测试 XML Web Service

现在,请打开窗体并测试 XML Web Service。

如果显示了属性表,请将其关闭。

在“视图”菜单上,单击“窗体视图”。

在对话框中键入两个字符的州名缩写(例如,VA),然后单击“获取信息”。

对话框中将显示来自 XML Web Service 的结果,如图 5 所示。

图 5:带有 XML Web Service 结果的 Access 窗体

小结

本文示范了创建、部署和访问 XML Web Service 的方法。这个 XML Web Service 接受两个字符的美国州名缩写,并返回该州的全称、首府、加入联邦的日期和加入顺序。首先,在 Web 服务器上创建一个虚拟根。接着,在 Visual Studio .NET 中创建一个 ASP.NET Web Service 项目,并添加代码以创建 XML Web Service 的功能。然后,创建一个 Access 2002 窗体作为客户端应用程序,并测试该 XML Web Service。通过使用本文所讨论的步骤,您会发现使用 Visual Studio .NET 和 Office XP 建立、部署和测试您自己的 XML Web Service 是多么容易。

 

相关推荐