監(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)閉

如何使用Visual Studio .NET和Office XP創(chuàng)建和部署XML Web Service

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

AMTeam.org

如何使用Visual Studio .NET和Office XP創(chuàng)建和部署XML Web Service


Frank C. Rice

Microsoft Corporation

2002 年 5 月

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

摘要:學(xué)習(xí)如何創(chuàng)建和部署用 Microsoft Visual Studio .NET 創(chuàng)建的 XML Web Service 示例。使用 Microsoft Access 2002 窗體來(lái)訪問 XML Web Service。

簡(jiǎn)介

XML Web Service 為應(yīng)用程序提供了一種交換數(shù)據(jù)和處理功能的方法。通常,XML Web Service 是一個(gè)存放在 Web 服務(wù)器上的動(dòng)態(tài)鏈接庫(kù) (DLL),可以通過(guò) Internet 調(diào)用其方法。在此方案中,客戶端應(yīng)用程序通過(guò)使用超文本傳輸協(xié)議 (HTTP) 發(fā)送和接收 SOAP 消息,與 XML Web Service 進(jìn)行通信。

在本文中,我們將示范如何使用 Microsoft? Visual Studio? .NET 來(lái)創(chuàng)建、部署和訪問 XML Web Service。首先,我們?cè)谔峁?XML Web Service 的 Web 服務(wù)器上設(shè)置 Internet Information Server (IIS)。

注意:IIS 4.0 與 Microsoft Windows NT ? 4.0 Server 兼容。IIS 5.0 與 Windows? 2000 Server 兼容,并且在默認(rèn)情況下與 Windows? 2000 Server 一起安裝。

然后,使用 Visual Studio .NET 創(chuàng)建一個(gè) ASP.NET Web Service 項(xiàng)目。接著,向項(xiàng)目中添加代碼來(lái)實(shí)現(xiàn) XML Web Service。我們的 XML Web Service 示例接受美國(guó)各州的兩個(gè)字符的州名縮寫,并返回有關(guān)該州的信息,包括該州的全名、首府、加入聯(lián)邦的日期及其加入順序。隨后,我們將在 Visual Studio .NET 中測(cè)試 XML Web Service。最后,用 Microsoft Access 2002 窗體創(chuàng)建客戶端應(yīng)用程序來(lái)訪問該 XML Web Service 并顯示結(jié)果。

XML Web Service 概述

那么,創(chuàng)建和使用 XML Web Service 要涉及到哪些操作呢?通常,用戶可能需要先導(dǎo)航到提供 XML Web Service 注冊(cè)(如通用說(shuō)明、發(fā)現(xiàn)和集成 [UDDI] 注冊(cè)服務(wù))的 Web 站點(diǎn),查看可用的 XML Web Service。注冊(cè)服務(wù)將提供各種可用 XML Web Service 的信息,例如:提供 XML Web Service 的公司名稱,公司 Web 站點(diǎn)的 URL 地址,以及用戶用來(lái)確定 XML Web Service 詳細(xì)信息的 WSDL 文件位置。

然后,開發(fā)人員使用從 WSDL 文件收集的信息來(lái)開發(fā)客戶端應(yīng)用程序,以便訪問 XML Web Service 并處理結(jié)果。開發(fā)人員首先需要設(shè)置對(duì) Microsoft SOAP 庫(kù) (mssoap1.dll) 的引用。Microsoft SOAP 庫(kù) (mssoap1.dll) 可以通過(guò)安裝 SOAP Toolkit 2.0 獲得。

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

Microsoft SOAP 庫(kù)包含使應(yīng)用程序能夠調(diào)用 XML Web Service 方法的客戶端(和服務(wù)器端)組件。然后,開發(fā)人員將設(shè)置對(duì) WSDL 文件的 Web 引用(使用 Web Service 引用工具)。

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

Web Service 引用工具會(huì)創(chuàng)建代理類(XML Web Service 在客戶端應(yīng)用程序中的本地表示形式),這樣就更容易使用 HTTP 與 XML Web Service 通信。通信由來(lái)自客戶端應(yīng)用程序的 SOAP 請(qǐng)求和來(lái)自 XML Web Service 的 SOAP 響應(yīng)組成。實(shí)現(xiàn) XML Web Service 的服務(wù)器將使用“偵聽器”(包含在用于實(shí)現(xiàn)處理程序的 WSDL 文件和 Active Server Page (ASP) 文件中的代碼)接收和分析 SOAP 請(qǐng)求。一旦偵聽器探測(cè)到來(lái)自客戶端應(yīng)用程序的 SOAP 請(qǐng)求,它就會(huì)分析該請(qǐng)求,通過(guò)傳遞任一參數(shù)調(diào)用 XML Web Service 方法,然后接收方法調(diào)用的結(jié)果。接著,偵聽器將響應(yīng)包裝在另一個(gè) SOAP 消息中,并將其發(fā)送給客戶端應(yīng)用程序,最后由客戶端組件分析和處理該結(jié)果。

至此,我們就看到了如何在客戶端使用 XML Web Service。要在 Web 服務(wù)器上創(chuàng)建和實(shí)現(xiàn) XML Web Service,需要以下組件:

一個(gè) DLL,該 DLL 包含能象 XML Web Service 一樣提供的函數(shù)(方法)。

一種方法,通過(guò)該方法可以向需要使用 XML Web Service 的客戶端通告所提供的功能、方法的名稱、所使用的輸入/輸出參數(shù)以及與 XML Web Service 相關(guān)的其他信息。這些信息由 WSDL 文件提供。

要使用 XML Web Service,您需要做的只是創(chuàng)建客戶端應(yīng)用程序以便使用 WSDL 文件中包含的信息來(lái)訪問 XML Web Service,以及確保在每個(gè)客戶端計(jì)算機(jī)上安裝 Microsoft SOAP 庫(kù)。其他可能需要的工具取決于用來(lái)創(chuàng)建客戶端的開發(fā)環(huán)境。

Visual Studio .NET 中的 XML Web Service

Microsoft Visual Studio .NET 通過(guò)自動(dòng)創(chuàng)建許多實(shí)現(xiàn) XML Web Service 時(shí)所需的文件來(lái)簡(jiǎn)化創(chuàng)建和部署 XML Web Service 的任務(wù)。例如,Visual Studio .NET 提供了 ASP.NET Web Service 項(xiàng)目類型來(lái)幫助您創(chuàng)建和使用 XML Web Service。

在創(chuàng)建 ASP.NET Web Service 項(xiàng)目時(shí),Visual Studio .NET 自動(dòng)構(gòu)造在 Web 服務(wù)器(假設(shè)正在 Web 服務(wù)器上開發(fā) XML Web Service)上實(shí)現(xiàn) XML Web Service 所需的項(xiàng)目和文件。例如,Visual Studio .NET 自動(dòng)創(chuàng)建一個(gè) .asmx 文件,以便包含向 XML Web Service 添加功能的類和方法。

注意:除了 Web 類前面帶有 [WebMethod] 屬性以外,XML Web Service 類與標(biāo)準(zhǔn)類相似。

另外,Visual Studio .NET 會(huì)自動(dòng)創(chuàng)建 WSDL 和 WSML 文件,甚至?xí)峁╋@示 XML Web Service 中使用的方法和參數(shù)的信息頁(yè)。您也可以使用此頁(yè)測(cè)試 XML Web Service。

在客戶端,可以使用 Microsoft Visual Basic? 6.0、Visual Studio .NET 或 Office 應(yīng)用程序(例如 Access 或 Microsoft Excel)來(lái)創(chuàng)建使用 XML Web Service 的客戶端應(yīng)用程序。首先,需要設(shè)置對(duì) WSDL 文件的引用。在 Visual Studio .NET 中實(shí)現(xiàn)的 XML Web Service 中,通過(guò)查詢字符串(例如,http://localhost/StatesInformationWS/StatesInformation.asmx?wsdl)來(lái)引用 .asmx 文件,從而實(shí)現(xiàn)對(duì) WSDL 文件的引用。在 Visual Basic 或 Office 應(yīng)用程序中,則通過(guò)使用 Web Service 引用工具來(lái)設(shè)置對(duì) WSDL 文件的 Web 引用。Web Service 引用工具包含在可以從 MSDN 下載的 Office XP Web Services Toolkit(英文)中。

然后,Web Service 引用工具就會(huì)獲取 WSDL 文件中的信息,并創(chuàng)建 Microsoft Visual Basic for Applications (VBA) 代理類。代理類提供 XML Web Service 在客戶端應(yīng)用程序中的本地表示形式。另外,因?yàn)?XML Web Service 類與客戶端應(yīng)用程序中的代理連接,所以在客戶端創(chuàng)建對(duì)象時(shí)可以使用 Microsoft IntelliSense?。然后,向調(diào)用代理類中的方法的應(yīng)用程序添加代碼。這樣,就可以開始使用 XML Web Service 了。

現(xiàn)在,讓我們用這些信息來(lái)使用和創(chuàng)建 XML Web Service。

創(chuàng)建 XML Web Service

要部署 XML Web Service,需要有一個(gè) Web 服務(wù)器,例如運(yùn)行 IIS 的 Microsoft Windows? 2000 Server。然后,需要在 Web 服務(wù)器上設(shè)置一個(gè)虛擬根(也稱為“虛擬目錄”),以便存儲(chǔ)創(chuàng)建的 XML Web Service 文件。

設(shè)置 Internet Information Server

向 Web 服務(wù)器添加一個(gè)文件夾??梢栽诜?wù)器上使用現(xiàn)有的文件夾或創(chuàng)建一個(gè)新文件夾。對(duì)于本示例,建議創(chuàng)建一個(gè)新文件夾(例如,C:StatesInfoWS)。

然后,在 IIS 中設(shè)置一個(gè)虛擬根。在控制面板中,雙擊“管理工具”,然后雙擊“Internet 服務(wù)管理器”,即顯示 Internet 信息服務(wù)控制臺(tái)。
在左側(cè)窗格中,展開包括您的 Web 服務(wù)器的節(jié)點(diǎn),右鍵單擊“默認(rèn) Web 站點(diǎn)”節(jié)點(diǎn),指向“New”,然后單擊“虛擬目錄”。這會(huì)打開虛擬目錄向?qū)А?BR>
在“歡迎使用虛擬目錄創(chuàng)建向?qū)А逼聊恢校瑔螕簟跋乱徊健薄?BR>
在“虛擬目錄別名”屏幕中,鍵入 StatesInfoWS,然后單擊“下一步”。

在“Web 站點(diǎn)內(nèi)容目錄”屏幕中,鍵入步驟 1 中創(chuàng)建的文件夾的路徑,然后單擊“下一步”。

在“訪問權(quán)限”屏幕中,選擇“讀取”和“運(yùn)行腳本”復(fù)選框,然后單擊“下一步”。單擊“完成”。

創(chuàng)建 ASP.NET 項(xiàng)目

現(xiàn)在,我們要用 GetStateInfo 方法創(chuàng)建名為 StatesInformationWS 的新 Visual Basic .NET ASP.NET Web Service 項(xiàng)目和名為 StatesInformation 的類模塊。

啟動(dòng) Visual Studio .NET。在開始頁(yè)面上,單擊 New Project(新建項(xiàng)目)。

在 New Project(新建項(xiàng)目)對(duì)話框中,在 Project Types(項(xiàng)目類型)列表中選擇 Visual Basic Projects(Visual Basic 項(xiàng)目),然后單擊 ASP.NET Web Service。

在 Location(位置)框中,鍵入
http://localhost/StatesInfoWS。請(qǐng)注意,在默認(rèn)情況下,所有的 XML Web Service 項(xiàng)目都保存在 Web 服務(wù)器的 localhost 虛擬目錄下。

單擊 OK(確定)。該項(xiàng)目將包含一個(gè)名為 Service1.asmx 的模塊、一個(gè)配置文件和一個(gè)發(fā)現(xiàn)文件 (.vsdisco)。其中,配置文件包含有關(guān) Web 服務(wù)器的配置信息,發(fā)現(xiàn)文件包含的信息使與您的服務(wù)器連接的其他應(yīng)用程序能夠定位您的 XML Web Service 并查看其成員的名稱和語(yǔ)法。
因?yàn)樵谙乱徊襟E中您將創(chuàng)建自己的文件,所以請(qǐng)先刪除 Service1.asmx 模塊。請(qǐng)選擇該文件,單擊鼠標(biāo)右鍵,再單擊 Delete(刪除),然后在確認(rèn)對(duì)話框中單擊 OK(確定)。

現(xiàn)在添加自己的 .asmx 文件。在 Solution Explorer(解決方案資源管理器)中,右鍵單擊 StatesInformationWS,選擇 Add(添加),然后選擇 Add New Item(添加新項(xiàng))。

在 Add New Item(添加新項(xiàng))對(duì)話框的 Web Project Item(Web 項(xiàng)目項(xiàng))下,選擇 Web Service 圖標(biāo),然后鍵入 StatesInformation.asmx。單擊 OK(確定)。

右鍵單擊 StatesInformation.asmx,然后選擇 View Code(查看代碼)。

在 Web Services Designer Generated Code(Web Service 設(shè)計(jì)器生成的代碼)語(yǔ)句下面添加以下代碼。這些代碼是用于向您的 XML Web Service 添加功能的方法:

<WebMethod()> Public Function GetStateInfo(ByVal strAbbreviatedName
        
As String) As String
   
' 目的:此過(guò)程用于模擬 XML Web Service。
   
'       此過(guò)程接受兩個(gè)字符的州名縮寫,
   
'       并返回有關(guān)該州的信息。
  
  ' 接受:strAbbreviatedName - 兩個(gè)字符的
  
  '       州名縮寫。
  
  ' 返回:有關(guān)該州的信息,包括全稱、首府、
   
'       加入聯(lián)邦的日期及其加入順序。
   
'
   
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 "您輸入的值不是有效的" & _
               
"州名縮寫。請(qǐng)輸入有效" & _
               
"的兩個(gè)字符的縮寫。"
   
End Select

End Function

現(xiàn)在,開始測(cè)試 XML Web Service。在 Project Explorer(項(xiàng)目資源管理器)中,選擇 StatesInformation.asmx,單擊鼠標(biāo)右鍵,然后單擊 Set As Start Page(設(shè)為開始頁(yè)面)。按 F5 鍵。這將開始生成應(yīng)用程序,并將 .NET 程序集和支持文件復(fù)制到 Web 服務(wù)器上的虛擬根文件夾下的 bin 文件夾中。Microsoft Internet Explorer 啟動(dòng),并且顯示新 XML Web Service 的描述。


圖 1:Internet Explorer 中顯示的 XML Web Service 描述

單擊超鏈接 GetStateInfo 測(cè)試該方法。在該頁(yè)面中,鍵入兩個(gè)字符的州名縮寫(例如 VA)。


 

圖 2:測(cè)試 XML Web Service 的 GetStateInfo 方法

單擊 Invoke(調(diào)用)。結(jié)果如圖 3 所示。


 

圖 3:GetStateInfo 方法的結(jié)果

祝賀您!XML Web Service 已經(jīng)運(yùn)行,現(xiàn)在您需要?jiǎng)?chuàng)建客戶端應(yīng)用程序。

如果您不在運(yùn)行 IIS 的 Web 服務(wù)器上創(chuàng)建此項(xiàng)目,就需要將其從開發(fā)計(jì)算機(jī)上復(fù)制到提供 XML Web Service 的 Web 服務(wù)器上(使用設(shè)置 Internet Information Server 節(jié)的步驟 1 中創(chuàng)建的文件夾),并在服務(wù)器上進(jìn)行注冊(cè),操作步驟如下:

在 Project(項(xiàng)目)菜單上,單擊 Copy Project(復(fù)制項(xiàng)目)。在 Copy Project(復(fù)制項(xiàng)目)對(duì)話框中,指定 Web 服務(wù)器的根目錄下的 StatesInfoWS 文件夾,然后單擊 OK(確定)。在發(fā)現(xiàn)和使用 XML Web Service 時(shí)所需的全部文件都將被復(fù)制到該文件夾下。
要進(jìn)行注冊(cè),請(qǐng)單擊“開始”按鈕,指向“運(yùn)行”,然后鍵入以下命令(用所復(fù)制的 DLL 的絕對(duì)路徑替換 <path>):
   regsvr32 <path>StatesInfoWS.dll

創(chuàng)建客戶端應(yīng)用程序

現(xiàn)在將在 Access 2002 中創(chuàng)建一個(gè)窗體來(lái)調(diào)用 XML Web Service 并顯示結(jié)果。

要在 Access 中創(chuàng)建此應(yīng)用程序,您需要在“引用”對(duì)話框(“工具”菜單)中設(shè)置對(duì)“Microsoft SOAP 類型庫(kù)”(mssoap1.dll) 的引用。

啟動(dòng) Access 2002。

在數(shù)據(jù)庫(kù)窗口中,單擊“對(duì)象”下的“窗體”,然后單擊“新建”顯示“新建窗體”對(duì)話框。

在“新建窗體”對(duì)話框中,選擇“設(shè)計(jì)視圖”,然后單擊“確定”。

在“視圖”菜單中,單擊“屬性”打開該窗體的屬性表。

在屬性表中,將“標(biāo)題”屬性中的文本改為“從 XML Web Service 獲取數(shù)據(jù)”。

從“工具箱”(“視圖”菜單)中將 Text Box 控件拖到窗體中。在屬性表中,將“名稱”屬性改為“txtAbbrevName”。

單擊 txtAbbrevName 控件的標(biāo)簽,然后將“標(biāo)題”屬性改為:輸入兩個(gè)字符的州名縮寫并單擊“獲取信息”。

從“工具箱”中將 Command Button 控件拖到窗體中。在“命令按鈕向?qū)А逼聊恢袉螕簟叭∠?。在屬性表中,將控件的名稱改為“cmdGetInfo”。

將 cmdGetInfo 控件的“標(biāo)題”屬性改為“獲取信息”。在屬性表中,單擊“事件”選項(xiàng)卡,單擊“On Click”事件,然后單擊生成按鈕(帶有橢圓的 ...)。

在 Visual Basic 編輯器中,首先需要添加一個(gè)對(duì) URL 的 Web 引用,該 URL 必須包含對(duì) XML Web Service 中可用方法的描述。在“工具”菜單中,單擊“Web Service References”。

在“Web Service References”對(duì)話框中,單擊“Web Service URL”。在“URL”框中,鍵入指向 XML Web Service 說(shuō)明文件的 URL 地址,然后單擊“搜索”。對(duì)于本例中的 XML Web Service,URL 地址應(yīng)該是
http://localhost/StatesInformationWS/StatesInformation.asmx?wsdl。

在 Search Results(搜索結(jié)果)框中選擇“StatesInformation”。單擊“+”展開節(jié)點(diǎn)。通過(guò)選擇“GetStateInfo”并單擊 Test(測(cè)試)來(lái)測(cè)試該方法。


 

圖 4:Web Service References 對(duì)話框

單擊“添加”。將 clsws_StatesInformation 類添加到“類模塊”文件夾下。這個(gè)類擔(dān)當(dāng)代理,用于提供與 XML Web Service 進(jìn)行交互的接口及提供 XML Web Service 的本地表示形式。

雙擊 clsws_StatesInformation 類。在滾動(dòng)顯示代碼時(shí),您會(huì)看到許多由 Web Service 引用工具自動(dòng)創(chuàng)建的事件過(guò)程,例如 Class_Initialize 和 Class_Terminate。您還會(huì)看到 wsm_GetStateInfo 函數(shù),它用于調(diào)用您創(chuàng)建的 XML Web Service 的 StatesInformation 類中的 GetStateInfo 方法。
雙擊窗體模塊。向 cmdGetInfo_Click 事件過(guò)程中添加以下代碼:

    ' 目的:該過(guò)程用于測(cè)試 StatesInformation XML

    '       Web Service 示例,方法是:調(diào)用

    '       clsws_StatesInformation 代理類的

    '       wsm_getStateInfo 函數(shù)。然后,此方法

    '       調(diào)用 XML Web Service 來(lái)發(fā)送兩個(gè)字符

    '       的州名縮寫并顯示返回的信息。

    '
    ' 返回:州的全稱、首府、加入聯(lián)邦的日期和加入

    '       順序。

    '
    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
   
    ' 創(chuàng)建對(duì) clsws_StatesInformation 類的引用。

    Set clsStatesWS = New clsws_StatesInformation
   
    Me!txtAbbrevName.SetFocus

    strUserInfo = Me!txtAbbrevName.Text
   
    ' 調(diào)用 wsm_GetStateInfo 方法。

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

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

        MsgBox strReturn, , "不是有效的輸入項(xiàng)"

        GoTo cmdGetInfo_Click_End

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

    ' 查找第一個(gè)“:”。

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

     ' 查找名稱之后的第一個(gè)空格。

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

    ' 要提取的字符數(shù)。

    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 字段結(jié)束處開始查找

    ' 第二個(gè)“:”。

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

    ' 查找日期之后的空格。

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

    ' 要提取的字符數(shù)。

    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

    ' 在日期之后查找逗點(diǎn)并在年份上加 6。

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

    ' 要提取的字符數(shù)。

    intLength = intEnd - intStart

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

    Me!txtDate.Text = strDate
   
    ' 最后,獲取該州加入聯(lián)邦的順序。

    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

關(guān)閉 Visual Basic 編輯器。

從“工具箱”中,將四個(gè)附加的 Text Box 控件添加到窗體中,放在“獲取信息”按鈕之下。
雙擊第一個(gè) Text Box 控件以顯示屬性表。將控件的名稱改為 txtName。

單擊該控件的標(biāo)簽并將“標(biāo)題”屬性改為“名稱:”。

為其余三個(gè)控件重復(fù)步驟 18 和 19,更改以下屬性:Text Box 控件的“名稱”屬性 與標(biāo)簽關(guān)聯(lián)的“標(biāo)題”屬性

TxtCapital 首府:

TxtDate 獲準(zhǔn)日期:

txtOrder 獲準(zhǔn)順序:

將一個(gè) Command Button 控件拖到窗體上,放在 txtOrder 控件之下。在“命令按鈕向?qū)А表?yè)面中,在“類別”列表中選擇“窗體操作”,然后在“操作”列表中選擇“關(guān)閉窗體”。單擊“下一步”。

在下一個(gè)屏幕中,選擇“文本”并將文本改為“關(guān)閉”。單擊“下一步”。

將控件的名稱改為 cmdClose,然后單擊“完成”。

測(cè)試 XML Web Service

現(xiàn)在,請(qǐng)打開窗體并測(cè)試 XML Web Service。

如果顯示了屬性表,請(qǐng)將其關(guān)閉。

在“視圖”菜單上,單擊“窗體視圖”。

在對(duì)話框中鍵入兩個(gè)字符的州名縮寫(例如,VA),然后單擊“獲取信息”。

對(duì)話框中將顯示來(lái)自 XML Web Service 的結(jié)果,如圖 5 所示。

圖 5:帶有 XML Web Service 結(jié)果的 Access 窗體

小結(jié)

本文示范了創(chuàng)建、部署和訪問 XML Web Service 的方法。這個(gè) XML Web Service 接受兩個(gè)字符的美國(guó)州名縮寫,并返回該州的全稱、首府、加入聯(lián)邦的日期和加入順序。首先,在 Web 服務(wù)器上創(chuàng)建一個(gè)虛擬根。接著,在 Visual Studio .NET 中創(chuàng)建一個(gè) ASP.NET Web Service 項(xiàng)目,并添加代碼以創(chuàng)建 XML Web Service 的功能。然后,創(chuàng)建一個(gè) Access 2002 窗體作為客戶端應(yīng)用程序,并測(cè)試該 XML Web Service。通過(guò)使用本文所討論的步驟,您會(huì)發(fā)現(xiàn)使用 Visual Studio .NET 和 Office XP 建立、部署和測(cè)試您自己的 XML Web Service 是多么容易。

 

發(fā)布:2007-03-25 13:29    編輯:泛普軟件 · 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在線咨詢