使用 .NET 架構將現有代碼作為 Web 服務提供

來源:互聯網
上載者:User
web 使用 .NET 架構將現有代碼作為 Web 服務提供
使用 .NET 建立分布式應用程式
Steve Kirk 和 Priya Dhawan
Microsoft Developer Network

摘要:本文介紹了使用 ASP.NET 將現有 Microsoft Visual Basic 6.0 代碼作為 Web 服務提供時所進行的資料轉換。適用於 Microsoft .NET SDK 和 Microsoft Visual Studio.NET 的 Beta 1 版。

目錄
簡介
現有代碼提供的資料類型
ADO 2x Command 對象
ADO 2x Recordset 對象
Stream 對象
XMLDOM 對象
XML 字串
總結

簡介
.NET 架構簡化了將 .NET 代碼作為 Web 服務提供的任務。.NET 架構開發人員指南中的 ASP.NET Web 服務和 ASP.NET Web 服務客戶機(英文)對此進行了說明。之所以能夠實現這種簡化,其中一個原因是 .NET 架構提供了一系列規則,用於將複雜的 .NET 資料類型轉換為 XML(序列化)以及反向轉換(還原序列化)。

編寫為 .NET 之前的類的現有代碼通過特定於語言的資料類型或 COM 物件來傳遞資料,因此不能依賴於相同的標準規則將這些資料類型序列化為 XML。本文介紹了將現有 Microsoft® Visual Basic 6.0 代碼作為 ASP.NET Web 服務提供時所需的資料轉換。

評估現有代碼是否適合於作為 Web 服務提供時,本文討論的資料轉換問題並不是唯一需要考慮的問題。應考慮的其它因素包括對象和狀態模型、返回的資料大小、如何表示已經成功、如何返回錯誤資訊、安全模型(包括存取控制、身分識別驗證和加密)、執行模型(同步或非同步)、如何分發代碼,以及事務模型(COM+ 事務或聲明型事務),等等。這些問題將在即將發表的體繫結構主題(英文)文章中進行討論。

現有代碼提供的資料類型
討論現有代碼傳遞的所有資料類型的轉換將是一個相當大的工程,因此本文只介紹一些最常用的資料類型,以及 XML(作為字串),因為如果使用 XML 對現有代碼進行擴充,那麼 XML 就可以涵蓋幾乎所有其它的資料類型。本文討論以下資料類型的轉換方法:

ADO 2x Command 對象
ADO2x Recordset 對象
Stream 對象
XMLDOM 對象
XML
ADO 2x Command 對象
直接存取資料庫的現有代碼經常會提供 Microsoft ActiveX® 資料對象 (ADO) 的 Command 對象。雖然不能在運行於不同進程中的應用程式層之間傳遞 Command 對象,但可以在同一進程內傳遞該對象。對於單行資料實體,通過 Command 對象的輸出參數返回資料比通過 ADO 記錄集返回資料效率更高。因此,ADO Command 對象對於返回單行實體資料十分有用。

讀資料
以下樣本中的現有代碼返回一個 ADO Command 對象,它包含作為輸出參數的資料。Command 對象的 Parameters 集合轉換為 XML 並返回給 Web 服務的客戶:

' 現有代碼返回 ADO Command 對象
Cmd = CType(EC.Example1(), ADODB.Command)
' 使用 XmlTextWriter 和 StringWriter 轉換 Command 對象的 Parameters 集合
' 初始化 stringwriter 和 xmlwriter 以返回 xml 字串
strWriter = New StringWriter()
xmlWriter = New XmlTextWriter(strWriter)
' 在 Parameters 集合內迴圈,寫入名稱和值
For i = 0 To Cmd.Parameters.Count - 1
xmlwriter.WriteElementString(Cmd.Parameters(i).Name.Substring(1),_
Cmd.Parameters(i).Value.ToString)
Next
' 將 xml 作為字串返回
Example1 = strWriter.GetStringBuilder.ToString()
寫資料
將資料作為 Command 對象的參數傳遞是一種非常有效資料傳遞方法。它還可以進行擴充,並提供了一些類型檢查功能。不幸的是,由於 Beta 1 中存在缺陷,Command 對象產生的資料無法傳遞到現有代碼。Beta 2 中解決了這個問題。Beta 1 的解決方案是對現有的 VB 6 代碼進行擴充,接受 XML。

ADO2x Recordset 對象
ADO 2x 中斷連線的記錄集通常用於在多層應用程式的各層之間傳遞資料。資料可以是單行、多行或分層次的行。

讀資料
本樣本中,現有代碼返回一個 ADO Recordset 對象,它包含的層次行資料將被轉換為 XML,然後由 Web 服務返回:

' 現有代碼返回記錄集
RS = CType(EC.Example3(), ADODB.Recordset)
' 執行個體化一個接收記錄集資料的流
Stream = New ADODB.Stream()
' 將記錄集的 XML 表示寫入流
RS.Save(Stream, ADODB.PersistFormatEnum.adPersistXML)
' 將 XML 作為字串從流返回
Example3 = Stream.ReadText
寫資料
以下樣本中,使用展示層次行資料的 XML 填充 ADO Recordset 對象,該對象將被傳遞到現有代碼:

' 執行個體化一個記錄集對象
RS = New ADODB.Recordset()
' 執行個體化一個流對象
Stream = New ADODB.Stream()
' 開啟流對象
Stream.Open()
' 將 XML 寫入流
Stream.WriteText(RsXML)
' 將指標定位到流的開頭
Stream.Position = 0
' 使用流中的 XML 資料開啟記錄集
RS.Open(Stream)
' 將記錄集傳遞到現有代碼
EC.Example4(RS)
Stream 對象
流提供了一種在應用程式的本地層之間傳遞資料的有效方法。它是從 Microsoft SQL Server™2000 中讀取 XML 的主要方法。

讀資料
以下樣本中,現有代碼返回展示層次行資料的 XML 流,它被作為字串讀取,並由 Web 服務返回:

Dim Stream As ADODB.Stream
Stream = CType(EC.Example5(), adodb.stream)
Example5 = Stream.ReadText
XMLDOM 對象
XMLDOM 對象是一種在多層應用程式的本地層之間傳遞資料的好方法。它提供了介面可擴充性、類型檢查和結構描述驗證功能。

讀資料
以下樣本中,現有代碼返回一個 XML 文件物件模型 (XMLDOM),它被轉換為 XML 字串並由 Web 服務返回:

Dim Doc As MSXML2.DOMDocument
' 現有代碼返回 XMLDOM 對象
Doc = CType(EC.Example6(), msxml2.DOMDocument)
' 從 DOM 對象返回 XML
Example6 = Doc.xml
寫資料
以下樣本中,使用展示層次行資料的 XML 填充 XMLDOM 對象,並將該對象傳遞到現有代碼:

Dim Doc As MSXML2.DOMDocument
' 執行個體化一個 XMLDOMDocument 對象
Doc = New MSXML2.DOMDocument()
' 將 XML 載入 DOM
Doc.loadXML(orderXML)
' 將 DOM 傳遞到現有代碼
EC.Example7(Doc)
XML 字串
XML 是一種在層與層之間傳遞資料的簡單方法。它還將資料的 XML 轉換過程推到 COM Interop邊界的“現有代碼”端,根據介面的不同,這可能會比在 COM Interop邊界將資料轉換為 XML 更有效。

讀資料
以下樣本中,現有代碼返回一個包含 XML 資料的字串,然後,該字串由 Web 服務傳遞給客戶:

EC = New ExCode.ExClass()
' 將 XML 字串直接從現有代碼傳遞給客戶
Example8 = EC.Example8()
寫資料
以下樣本中,層次行資料的 XML 表示作為字串傳遞到現有代碼:

EC = New ExCode.ExClass()
' 將 XML 字串直接從客戶傳遞到現有代碼
EC.Example9(orderXML)

總結
本文及附帶的樣本介紹了有關資料轉換的資訊。通過資料轉換,可以使用 ASP.NET 將現有代碼作為 Web 服務提供。本文討論了一些常用的介面對象,其中包括 XML 字串,如果使用相應的介面對現有代碼進行擴充,它可以涵蓋大多數資料。

這些解決方案的效能各異,並且受所傳遞的資料大小影響。在本系列後面的文章中,我們將對這些實現方法進行比較。

評估現有代碼是否適合作為 Web 服務時,介面只不過是應當考慮的諸多因素之一。應考慮的其它因素包括安全性(包括授權、身分識別驗證和加密)、事務模型、狀態模型、返回錯誤和結果的方式,以及代碼是同步還是非同步執行,等等。



相關文章

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 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。