監(jiān)理公司管理系統(tǒng) | 工程企業(yè)管理系統(tǒng) | OA系統(tǒng) | ERP系統(tǒng) | 造價咨詢管理系統(tǒng) | 工程設(shè)計管理系統(tǒng) | 甲方項目管理系統(tǒng) | 簽約案例 | 客戶案例 | 在線試用
X 關(guān)閉
上海OA信息化

當(dāng)前位置:工程項目OA系統(tǒng) > 泛普各地 > 上海OA系統(tǒng) > 上海OA信息化

使用 .NET 框架將現(xiàn)有代碼作為Web服務(wù)提供

申請免費試用、咨詢電話:400-8352-114

AMTeam.org

使用 .NET 框架將現(xiàn)有代碼作為Web服務(wù)提供

 
使用 .NET 建立分布式應(yīng)用程序

Steve Kirk 和 Priya Dhawan

Microsoft Developer Network

摘要:本文介紹了使用 ASP.NET 將現(xiàn)有 Microsoft Visual Basic 6.0 代碼作為 Web 服務(wù)提供時所進(jìn)行的數(shù)據(jù)轉(zhuǎn)換。適用于 Microsoft .NET SDK 和 Microsoft Visual Studio.NET 的 Beta 1 版。

簡介

.NET 框架簡化了將 .NET 代碼作為 Web 服務(wù)提供的任務(wù)。.NET 框架開發(fā)人員指南中的 ASP.NET Web 服務(wù)和 ASP.NET Web 服務(wù)客戶機(jī)(英文)對此進(jìn)行了說明。之所以能夠?qū)崿F(xiàn)這種簡化,其中一個原因是 .NET 框架提供了一系列規(guī)則,用于將復(fù)雜的 .NET 數(shù)據(jù)類型轉(zhuǎn)換為 XML(序列化)以及反向轉(zhuǎn)換(反序列化)。

編寫為 .NET 之前的類的現(xiàn)有代碼通過特定于語言的數(shù)據(jù)類型或 COM 對象來傳遞數(shù)據(jù),因此不能依賴于相同的標(biāo)準(zhǔn)規(guī)則將這些數(shù)據(jù)類型序列化為 XML。本文介紹了將現(xiàn)有 Microsoft? Visual Basic 6.0 代碼作為 ASP.NET Web 服務(wù)提供時所需的數(shù)據(jù)轉(zhuǎn)換。

評估現(xiàn)有代碼是否適合于作為 Web 服務(wù)提供時,本文討論的數(shù)據(jù)轉(zhuǎn)換問題并不是唯一需要考慮的問題。應(yīng)考慮的其它因素包括對象和狀態(tài)模型、返回的數(shù)據(jù)大小、如何表示已經(jīng)成功、如何返回錯誤信息、安全模型(包括訪問控制、身份驗證和加密)、執(zhí)行模型(同步或異步)、如何分發(fā)代碼,以及事務(wù)模型(COM+ 事務(wù)或聲明型事務(wù)),等等。這些問題將在即將發(fā)表的體系結(jié)構(gòu)主題(英文)文章中進(jìn)行討論。

現(xiàn)有代碼提供的數(shù)據(jù)類型

討論現(xiàn)有代碼傳遞的所有數(shù)據(jù)類型的轉(zhuǎn)換將是一個相當(dāng)大的工程,因此本文只介紹一些最常用的數(shù)據(jù)類型,以及 XML(作為字符串),因為如果使用 XML 對現(xiàn)有代碼進(jìn)行擴(kuò)展,那么 XML 就可以涵蓋幾乎所有其它的數(shù)據(jù)類型。本文討論以下數(shù)據(jù)類型的轉(zhuǎn)換方法:

ADO 2x Command 對象

ADO2x Recordset 對象

Stream 對象

XMLDOM 對象

XML

ADO 2x Command 對象

直接訪問數(shù)據(jù)庫的現(xiàn)有代碼經(jīng)常會提供 Microsoft ActiveX? 數(shù)據(jù)對象 (ADO) 的 Command 對象。雖然不能在運行于不同進(jìn)程中的應(yīng)用程序?qū)又g傳遞 Command 對象,但可以在同一進(jìn)程內(nèi)傳遞該對象。對于單行數(shù)據(jù)實體,通過 Command 對象的輸出參數(shù)返回數(shù)據(jù)比通過 ADO 記錄集返回數(shù)據(jù)效率更高。因此,ADO Command 對象對于返回單行實體數(shù)據(jù)十分有用。

讀數(shù)據(jù)

以下示例中的現(xiàn)有代碼返回一個 ADO Command 對象,它包含作為輸出參數(shù)的數(shù)據(jù)。Command 對象的 Parameters 集合轉(zhuǎn)換為 XML 并返回給 Web 服務(wù)的客戶:

' 現(xiàn)有代碼返回 ADO Command 對象

Cmd = CType(EC.Example1(), ADODB.Command)

' 使用 XmlTextWriter 和 StringWriter 轉(zhuǎn)換 Command 對象的 Parameters 集合

' 初始化 stringwriter 和 xmlwriter 以返回 xml 字符串

strWriter = New StringWriter()

xmlWriter = New XmlTextWriter(strWriter)

' 在 Parameters 集合內(nèi)循環(huán),寫入名稱和值

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

寫數(shù)據(jù)

將數(shù)據(jù)作為 Command 對象的參數(shù)傳遞是一種非常有效的數(shù)據(jù)傳遞方法。它還可以進(jìn)行擴(kuò)展,并提供了一些類型檢查功能。不幸的是,由于 Beta 1 中存在缺陷,Command 對象產(chǎn)生的數(shù)據(jù)無法傳遞到現(xiàn)有代碼。Beta 2 中解決了這個問題。Beta 1 的解決方法是對現(xiàn)有的 VB 6 代碼進(jìn)行擴(kuò)展,接受 XML。

ADO2x Recordset 對象

ADO 2x 斷開連接的記錄集通常用于在多層應(yīng)用程序的各層之間傳遞數(shù)據(jù)。數(shù)據(jù)可以是單行、多行或分層次的行。

讀數(shù)據(jù)

本示例中,現(xiàn)有代碼返回一個 ADO Recordset 對象,它包含的層次行數(shù)據(jù)將被轉(zhuǎn)換為 XML,然后由 Web 服務(wù)返回:

' 現(xiàn)有代碼返回記錄集

RS = CType(EC.Example3(), ADODB.Recordset)

' 實例化一個接收記錄集數(shù)據(jù)的流

Stream = New ADODB.Stream()

' 將記錄集的 XML 表示寫入流

RS.Save(Stream, ADODB.PersistFormatEnum.adPersistXML)

' 將 XML 作為字符串從流返回

Example3 = Stream.ReadText

寫數(shù)據(jù)

以下示例中,使用表示層次行數(shù)據(jù)的 XML 填充 ADO Recordset 對象,該對象將被傳遞到現(xiàn)有代碼:

' 實例化一個記錄集對象

RS = New ADODB.Recordset()

' 實例化一個流對象

Stream = New ADODB.Stream()

' 打開流對象

Stream.Open()

' 將 XML 寫入流

Stream.WriteText(RsXML)

' 將指針定位到流的開頭

Stream.Position = 0

' 使用流中的 XML 數(shù)據(jù)打開記錄集

RS.Open(Stream)   

' 將記錄集傳遞到現(xiàn)有代碼

EC.Example4(RS)

Stream 對象

流提供了一種在應(yīng)用程序的本地層之間傳遞數(shù)據(jù)的有效方法。它是從 Microsoft SQL Server?2000 中讀取 XML 的主要方法。

讀數(shù)據(jù)

以下示例中,現(xiàn)有代碼返回表示層次行數(shù)據(jù)的 XML 流,它被作為字符串讀取,并由 Web 服務(wù)返回:

Dim Stream As ADODB.Stream

Stream = CType(EC.Example5(), adodb.stream)

Example5 = Stream.ReadText

XMLDOM 對象

XMLDOM 對象是一種在多層應(yīng)用程序的本地層之間傳遞數(shù)據(jù)的好方法。它提供了接口可擴(kuò)展性、類型檢查和架構(gòu)驗證功能。

讀數(shù)據(jù)

以下示例中,現(xiàn)有代碼返回一個 XML 文檔對象模型 (XMLDOM),它被轉(zhuǎn)換為 XML 字符串并由 Web 服務(wù)返回:

Dim Doc As MSXML2.DOMDocument

' 現(xiàn)有代碼返回 XMLDOM 對象

Doc = CType(EC.Example6(), msxml2.DOMDocument)

' 從 DOM 對象返回 XML

Example6 = Doc.xml

寫數(shù)據(jù)

以下示例中,使用表示層次行數(shù)據(jù)的 XML 填充 XMLDOM 對象,并將該對象傳遞到現(xiàn)有代碼:

Dim Doc As MSXML2.DOMDocument

' 實例化一個 XMLDOMDocument 對象

Doc = New MSXML2.DOMDocument()

' 將 XML 載入 DOM

Doc.loadXML(orderXML)

' 將 DOM 傳遞到現(xiàn)有代碼

EC.Example7(Doc)

XML 字符串

XML 是一種在層與層之間傳遞數(shù)據(jù)的簡單方法。它還將數(shù)據(jù)的 XML 轉(zhuǎn)換過程推到 COM 互操作邊界的“現(xiàn)有代碼”端,根據(jù)接口的不同,這可能會比在 COM 互操作邊界將數(shù)據(jù)轉(zhuǎn)換為 XML 更有效。

讀數(shù)據(jù)

以下示例中,現(xiàn)有代碼返回一個包含 XML 數(shù)據(jù)的字符串,然后,該字符串由 Web 服務(wù)傳遞給客戶:

EC = New ExCode.ExClass()

' 將 XML 字符串直接從現(xiàn)有代碼傳遞給客戶

Example8 = EC.Example8()

寫數(shù)據(jù)

以下示例中,層次行數(shù)據(jù)的 XML 表示作為字符串傳遞到現(xiàn)有代碼:

EC = New ExCode.ExClass()

' 將 XML 字符串直接從客戶傳遞到現(xiàn)有代碼

EC.Example9(orderXML)

總結(jié)

本文及附帶的示例介紹了有關(guān)數(shù)據(jù)轉(zhuǎn)換的信息。通過數(shù)據(jù)轉(zhuǎn)換,可以使用 ASP.NET 將現(xiàn)有代碼作為 Web 服務(wù)提供。本文討論了一些常用的接口對象,其中包括 XML 字符串,如果使用相應(yīng)的接口對現(xiàn)有代碼進(jìn)行擴(kuò)展,它可以涵蓋大多數(shù)數(shù)據(jù)。

這些解決方案的性能各異,并且受所傳遞的數(shù)據(jù)大小影響。在本系列后面的文章中,我們將對這些實現(xiàn)方法進(jìn)行比較。

評估現(xiàn)有代碼是否適合作為 Web 服務(wù)時,接口只不過是應(yīng)當(dāng)考慮的諸多因素之一。應(yīng)考慮的其它因素包括安全性(包括授權(quán)、身份驗證和加密)、事務(wù)模型、狀態(tài)模型、返回錯誤和結(jié)果的方式,以及代碼是同步還是異步執(zhí)行,等等。

發(fā)布:2007-03-24 18:00    編輯:泛普軟件 · xiaona    [打印此頁]    [關(guān)閉]
相關(guān)文章:
上海OA系統(tǒng)
聯(lián)系方式

成都公司:成都市成華區(qū)建設(shè)南路160號1層9號

重慶公司:重慶市江北區(qū)紅旗河溝華創(chuàng)商務(wù)大廈18樓

咨詢:400-8352-114

加微信,免費獲取試用系統(tǒng)

QQ在線咨詢