如果使用 Visual Studio .NET,由 IDE 產生的代理類能夠比 SOAPClient 更好地表示 Web 服務。在圖 4 中,您可以看到用於訪問 Web 服務的 IntelliSense 支援。createCustomer 方法是與 Web 服務互動的對象所擁有的方法之一。
圖 4:Visual Studio .NET 中對 Web 服務的 IntelliSense 支援
SOAP Toolkit 2.0 概述
本節簡單回顧了在上一節 Web 服務、SOAP 和您的工具中介紹的建立 Web 服務的過程。
使用 SOAP Toolkit 建立和訪問 Web 服務
在 Visual Basic 6.0 中,為 Web 服務建立名為 CustCP 的新 Visual Basic ActiveX DLL 項目和名為 Customerservices 的類別模組及其代碼:
Public Function createCustomer(ByVal First As String, _
ByVal Last As String) As String
createCustomer = "A" & CStr(Len(First)) & _
CStr(Len(Last))
End Function
使用 SOAP Toolkit 的 WSDL 嚮導產生 WSDL 和 WSML 檔案(WSML 檔案中包含 SOAPServer 用於從 Web 服務映射到 ActiveX COM 物件的資訊)。
建立 SOAP 接聽程式,作為使用 SOAPServer 的 ASP 頁:
<%@ LANGUAGE=VBScript %>
<%Option Explicit
Set ss = Server.CreateObject("MSSOAP.SoapServer")
ss.Init WSDL, WSML
ss.SOAPInvoke Request, Response, ""%>
建立用戶端以調用使用 SOAPClient 的 Web 服務:
Private Sub cmdCreate_Click()
Dim sc As MSSOAPLib.SoapClient
Set sc = New SoapClient
sc.mssoapinit "http://vogel2/cust/cust.wsdl"
Me.txtCustId.text = _
sc.createCustomer(Me.txtFirstName.text, _
Me.txtLastName.text)
End Sub
Visual Basic .NET 演練
在本節中,您將瞭解如何完成以下操作:
在 Visual Studio .NET 中建立 Web 服務。
從 Visual Basic .NET 應用程式訪問 Web 服務。
在 Visual Studio .NET 中產生 Web 服務時,將為該 Web 服務自動產生一個“發現檔案”。發現檔案用於向其他 Visual Studio .NET 應用程式添加 Web 服務參考,包括 WSDL 描述。
注意:對於 Visual Basic 和 C# 項目,發現檔案的檔案類型是 .vsdisco;對於 C 項目,則是 .disco。
在 Visual Studio .NET 中建立 Web 服務
在 File(檔案)菜單上,選擇 New(建立)以顯示 New Project(建立項目)對話方塊,如圖 5 所示。
圖 5:Visual Studio .NET New Project(建立項目)對話方塊
在 Visual Basic Projects(項目)部分中,選擇 ASP.NET Web 服務。
在 Name(名稱)框中,給出項目名稱 (MigratetoDotNetService)。
為 Web 服務輸入 Web 網站 URL (localhost/customer)。
單擊 OK(確定),建立項目。預設情況下,項目包含名為 Service1.asmx 的模組。
按右鍵 Service1.asmx 模組,並從菜單中選擇 View Code(查看代碼)。
將此代碼添加到模組頂部的 Public Class Service1 語句中,如下所示:
<WebService(Namespace:="http://phvis.com/customer/", _
Description:="客戶管理") _
Public Class Service1
從 Visual Basic 6.0 樣本中複製 createCustomer 函數,但將 <WebMethod> 屬性添加到函式宣告中,如下所示:
<WebMethod(Description:= _
"傳遞姓名,返回 ID 值")> _
Public Function createCustomer( _
ByVal First As String, _
ByVal Last As String) As String
只需要更改一處,就可以將 Visual Basic 6.0 代碼轉換成 Visual Basic .NET 文法。使用 Return 替換函數中的 createCustomer =,如下所示:
Return "A" & CStr(Len(First)) & _
CStr(Len(Last))
End Function
在 Build(產生)菜單上,選擇 Build(產生)以建立 Web 服務。在 Output(輸出)視窗中檢查產生過程中的錯誤。作為產生的一部分,還會產生應用程式的發現檔案。
建立用戶端
無需建立 .NET 用戶端,用 SOAP Toolkit 建立的 Visual Basic 6.0 應用程式就可以訪問 .NET Web 服務。以下步驟將展示如何為 Web 服務建立 .NET 用戶端(與 Web 服務是用 Visual Basic 6.0 還是用 Visual Basic .NET 編寫無關):
在 File(檔案)菜單上,選擇 New(建立),然後選擇 Project(項目)以顯示 Add Project(添加項目)對話方塊。
在 Visual Basic Projects(項目)部分,選擇 Windows Application(Windows 應用程式)。
在 Name(名稱)框中給出項目名稱 (MigratetoWebClient),然後單擊 OK(確定)以建立項目。
在 Solution Explorer(方案總管)中,按右鍵此項目並選擇 Add Web Reference(添加 Web 參考)。將顯示 Add Web Reference(添加 Web 參考)對話方塊,如圖 6 所示。
圖 6:Add Web Reference(添加 Web 參考)對話方塊
在 Address(地址)框中輸入 Web 服務項目的 .vsdisco 檔案的 URL。例如,http://localserver/customers/MigratetoNetService.vsdisco。單擊 Address(地址)框末尾的箭頭選取引用。
注意:通過將 .vsdisco 檔案從 Solution Explorer(方案總管)拖動到代碼模組中,也可以獲得 Web 服務項目的 .vsdisco 檔案的 URL。這會將檔案的 URL 添加到代碼模組中。然後,從模組中剪下 URL,並將其粘貼到 Add Web Reference(添加 Web 參考)對話方塊的 Address(地址)框中。
單擊 Add Reference(添加引用)按鈕返回項目。對 Web 服務的引用將顯示在 Solution Explorer(方案總管)中,如圖 7 所示。
圖 7:包含一個 Web 服務參考的 Visual Basic Windows 應用程式
向表單添加名為 txtFirstName 和 txtLastName 的文字框,用於存放客戶的姓名,並為調用 Web 服務的代碼添加一個按鈕。
添加代碼以聲明引用代理類的變數,此代理類處理 Web 服務(代理類的預設名稱由伺服器名稱和服務名稱組成):
Private Sub cmdCreate_Click()
Dim cc As localhost.service1
添加代碼,執行個體化代理類並調用 Web 服務的方法:
Set cc = New localhost.service1
Me.txtCustId.text = _
cc.createCustomer(Me.txtFirstName.Text, _
Me.txtLastName.Text)
End Sub
按 F5,運行用戶端並訪問 Web 服務。
從 SOAP Toolkit 轉換到 Visual Studio .NET
使用 SOAP Toolkit 或 .NET Web 服務產生的應用程式符合 SOAP 規範。使用基於 SOAP 的應用程式時,用戶端和 Web 服務之間的串連由 WSDL 檔案定義。使用 .NET 產生的 Web 服務可以使用由 SOAP Toolkit 產生的 Web 服務,反之亦然。這使您可以通過存放服務常量的 WSDL 定義,逐步從 SOAP Toolkit 遷移到 .NET。例如,在 Web 服務轉換到 .NET 的同時,訪問 Web 服務的用戶端能繼續使用 SOAP Toolkit 的 SOAPClient。
存放 Web 服務常量的 WSDL 檔案的最簡單方法是,將 Visual Basic 6.0 代碼複製到 Web 服務的 asmx 模組中。複製完成後,必須將 <WebService> 和 <WebMethod> 屬性添加到類別模組中,以建立 .NET Web 服務。然後,需要將 Visual Basic 6.0 代碼轉換成 .NET 文法,如 MSDN 和本系列的其他文章所述。如果您想建立全新的 .NET 版的 Web 服務,可以使用 SOAP Toolkit 版的 WSDL 檔案產生 Web 服務的基本代碼。
在用戶端,訪問 Web 服務的不同用戶端應用程式可以分別從 SOAP Toolkit 轉換到 .NET。由於 SOAP 規範提供的互通性,即使由一個用戶端產生了多個 .NET 版本,也不會產生問題。要在用戶端內從 SOAP Toolkit 轉換到 Visual Studio .NET,必須用對 Web 服務代理的引用替換對 SOAPClient 的引用。