從 SOAP Toolkit 遷移到 Web 服務

來源:互聯網
上載者:User
web 摘要:如何從 Visual Basic 6.0 和 Visual Basic .NET 訪問 Web 服務,以及如何將現有的 SOAP 應用程式轉換到 .NET 平台。

目標
瞭解 Microsoft® Visual Studio® .NET 中的 SOAP 工具
回顧使用 SOAP 和 Visual Basic® 6.0 訪問 COM/COM+ 組件
從 Visual Basic .NET 訪問 Web 服務
將 SOAP Toolkit 應用程式遷移到 Web 服務
前提條件
瞭解什麼是 Web 服務
精通並且可以訪問 Visual Basic 6.0 和 SOAP,且知道如何建立 ActiveX® DLL 項目
熟悉有關 Visual Studio .NET 的基礎知識
Web 服務、SOAP 和您的工具
Web 服務提供了可以通過 網際網路存取的功能,即調用 Web 服務並擷取返回的結果。Web 服務的新增功能是,您現在可以串連到世界最大網路 Internet 上的服務。不過,作為一名 Visual Basic 程式員,Web 服務為您處理了繁瑣的 Internet 事務。

在本文中,您將瞭解如何使用 Visual Studio .NET 訪問 Web 服務、回顧使用 Visual Basic 6.0 和 SOAP Toolkit 2.0 建立 Web 服務的過程,還將瞭解如何轉換現有的 SOAP Toolkit 應用程式,以便在 .NET 架構中使用 Web 服務。

本文使用的 Web 服務有一個非常簡單的函數 createCustomer。它接受客戶的姓名,並返回客戶標識符。但是,我們不在這裡討論 Web 服務的功能,以便您可以集中精力瞭解如何使用 Visual Basic 6.0 或 Visual Basic .NET 建立和訪問 Web 服務。

Visual Basic 和 SOAP
使用者通過發送和接收 SOAP 文檔與 Web 服務通訊。在 Visual Basic 6.0 中,有兩種方法可以建立 SOAP 文檔:

通過連接字串組合文檔
使用 SOAP Toolkit 2.0 中的 SoapClient
SoapClient 不僅建立一個 SOAP 文檔與 Web 服務通訊,還將該文檔發送到 Web 服務進行處理。

在傳輸的 Web 服務端,需要一個 SOAP 接聽程式捕獲並處理用戶端發送的文檔。SOAP Toolkit 2.0 包括 SoapServer,可以在偵聽應用程式中使用它處理 SOAP 文檔。接聽程式是單獨建立的應用程式,它獨立於實現 Web 服務的組件。

使用 Visual Studio .NET,可以簡化對 Web 服務的建立和訪問。在 Visual Studio .NET 中,建立 Web 服務並不要求構造單獨的偵聽應用程式。在訪問 Web 服務時,它會自動為您建立代理,這樣,您使用 Web 服務就像訪問其他任何對象一樣。

Web 服務描述工具
Web 服務描述語言 (WSDL) 是一種 XML 語言,它是專門為描述 Web 服務而設計的。作為使 Web 服務成為開放式標準的過程的一部分,WSDL 已連同 SOAP 一起提交到 W3C。對服務的 WSDL 描述可以包含 wsdlSpec tModel,它為服務提供建立和發送 SOAP 文檔所需的全部資訊。以下是支援 createCustomer 函數的 wsdlSpec tModel 檔案的樣本:

<?xml version='1.0' encoding='UTF-8' ?>
<!-- Generated 06/25/01 by Microsoft SOAP Toolkit WSDL
File Generator, Version 1.00.623.1 -->
<definitions name ='cust'
targetNamespace = 'http://tempuri.org/wsdl/'
xmlns:wsdlns='http://tempuri.org/wsdl/'
xmlns:typens='http://tempuri.org/type'
xmlns:soap='http://schemas.xmlsoap.org/wsdl/soap/'
xmlns:xsd='http://www.w3.org/2001/XMLSchema'
xmlns:stk=
'http://schemas.microsoft.com/soap-toolkit/wsdl-extension'
xmlns='http://schemas.xmlsoap.org/wsdl/'>
<types>
<schema targetNamespace='http://tempuri.org/type'
xmlns='http://www.w3.org/2001/XMLSchema'
xmlns:SOAP-ENC=
'http://schemas.xmlsoap.org/soap/encoding/'
xmlns:wsdl='http://schemas.xmlsoap.org/wsdl/'
elementFormDefault='qualified'>
</schema>
</types>
<message name='Custservices.createCustomer'>
<part name='First' type='xsd:string'/>
<part name='Last' type='xsd:string'/>
</message>
<message name='Custservices.createCustomerResponse'>
<part name='Result' type='xsd:string'/>
</message>
<portType name='CustservicesSoapPort'>
<operation name='createCustomer'
parameterOrder='First Last'>
<input message=
'wsdlns:Custservices.createCustomer' />
<output
message='wsdlns:Custservices.createCustomerResponse' />
</operation>
</portType>
<binding name='CustservicesSoapBinding'
type='wsdlns:CustservicesSoapPort' >
<stk:binding preferredEncoding='UTF-8'/>
<soap:binding style='rpc'
transport='http://schemas.xmlsoap.org/soap/http' />
<operation name='Add' >
<soap:operation soapAction=
'http://tempuri.org/action/Custservices.Add' />
<input>
<soap:body use='encoded'
namespace='http://tempuri.org/message/'
encodingStyle=
'http://schemas.xmlsoap.org/soap/encoding/' />
</input>
<output>
<soap:body use='encoded'
namespace='http://tempuri.org/message/'
encodingStyle=
'http://schemas.xmlsoap.org/soap/encoding/' />
</output>
</operation>
</binding>
<service name='cust' >
<port name='CustservicesSoapPort'
binding='wsdlns:CustservicesSoapBinding' >
<soap:address
location='http://localhost/customer/cust.ASP' />
</port>
</service>
</definitions>

wsdlSpec tModel 末尾的 <service> 標記指定將請求發送到哪個 SOAP 接聽程式,在本例中,將發送到 http://localhost/cust/cust.asp 頁。此檔案的前一部分說明服務可以使用的訊息。

注意:SOAP 文檔中使用的名稱空間 tempuri.org 是一個臨時名稱空間,僅在開發時使用 (temporary uri)。在此服務投入到產品之前,應修改 WSDL 檔案,使其擁有唯一的 URI(例如,您公司網站的 URL)。
SOAP Toolkit 對象和 Visual Studio .NET IDE 都讀取 WSDL 檔案。SoapClient 使用 WSDL 檔案中的資訊以使其作為 Web 服務的代理。Visual Studio .NET 使用同樣的資訊為 Web 服務組建代理程式類。因此,您可以執行以下操作:

調用 Web 服務的方法,好像它們是這些代理的方法。
發送訊息前,根據 Web 服務的 WSDL 描述驗證調用。
與代理互動,而不必熟悉 WSDL 檔案的內容或要產生的 SOAP 文檔。
圖 1 顯示了各個組件之間的關係,包括 Web 服務元語言 (WSML) 檔案。只有 Visual Basic 6.0 需要此檔案,並在其演練中描述此檔案。




圖 1:Web 服務和用戶端示意圖

在 SOAP 中,SOAP Toolkit 和 Visual Studio .NET IDE 執行類似的功能。所不同的是,SOAP Toolkit 對象不能提供 Visual Basic 開發人員所需的全部支援。在圖 2 中,可以看到 IntelliSense® 支援(Visual Basic 程式員認為此類支援是必要的)。IntelliSense 下拉式清單自動顯示 Customerservices COM 物件的 createCustomer 方法。




圖 2:COM/DCOM/COM+ 對象的 IntelliSense 支援

在圖 3 中,您可以看到 SoapClient 為 Web 服務提供的 IntelliSense 支援。所有的 SoapClient 方法均列出,但沒有顯示將 SoapClient 作為代理的服務所擁有的方法(即 createCustomer)。




圖 3:使用 SoapClient 的 IntelliSense 支援

如果使用 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

Dim ss
Dim WSDL
Dim WSML

Response.ContentType = "text/xml"

WSDL = Server.MapPath("cust.wsdl")
WSML = Server.MapPath("cust.wsml")

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 的引用。

小結
您已經瞭解了如何從 Visual Basic 6.0 和 Visual Basic .NET 訪問 Web 服務。還瞭解了將現有的 SOAP 應用程式轉換到 .NET 平台所需完成的操作。

重點要記住的是以下三點:

WSDL 檔案用於描述可以發送到 Web 服務的 SOAP 文檔。在 Visual Basic 6.0 中,可以使用 SOAP Toolkit 的 WSDL Generator 建立此檔案;在 Visual Studio .NET 中,將為您自動產生此檔案。
在 Visual Basic 6.0 中建立 Web 服務時,需要 Microsoft WSML 檔案和單獨的 ASP 接聽程式頁;在 Visual Studio .NET 中建立 ASP.NET Web 服務時,兩者都不需要。
可以隨意混用用戶端和服務,而不必考慮平台。可以使用 SoapClient,從 Visual Basic 6.0 用戶端或 ASP 頁調用 Visual Basic .NET Service,並且您的 Visual Basic 6.0 Web 服務可以使用 SoapServer 處理來自 Visual Studio .NET 用戶端的請求。

相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。