當前位置:工程項目OA系統(tǒng) > 泛普各地 > 上海OA系統(tǒng) > 上海OA信息化
使用 .NET 框架將現(xiàn)有代碼作為Web服務提供
使用 .NET 框架將現(xiàn)有代碼作為Web服務提供
使用 .NET 建立分布式應用程序
Steve Kirk
和 Priya Dhawan
Microsoft Developer Network
摘要:本文介紹了使用 ASP.NET 將現(xiàn)有 Microsoft Visual Basic 6.0 代碼作為 Web 服務提供時所進行的數(shù)據(jù)轉換。適用于 Microsoft .NET SDK 和 Microsoft Visual Studio.NET 的 Beta 1 版。
簡介
.NET 框架簡化了將 .NET 代碼作為 Web
服務提供的任務。.NET 框架開發(fā)人員指南中的 ASP.NET Web 服務和 ASP.NET Web
服務客戶機(英文)對此進行了說明。之所以能夠實現(xiàn)這種簡化,其中一個原因是 .NET 框架提供了一系列規(guī)則,用于將復雜的 .NET 數(shù)據(jù)類型轉換為
XML(序列化)以及反向轉換(反序列化)。
編寫為 .NET 之前的類的現(xiàn)有代碼通過特定于語言的數(shù)據(jù)類型或 COM 對象來傳遞數(shù)據(jù),因此不能依賴于相同的標準規(guī)則將這些數(shù)據(jù)類型序列化為 XML。本文介紹了將現(xiàn)有 Microsoft? Visual Basic 6.0 代碼作為 ASP.NET Web 服務提供時所需的數(shù)據(jù)轉換。
評估現(xiàn)有代碼是否適合于作為 Web 服務提供時,本文討論的數(shù)據(jù)轉換問題并不是唯一需要考慮的問題。應考慮的其它因素包括對象和狀態(tài)模型、返回的數(shù)據(jù)大小、如何表示已經(jīng)成功、如何返回錯誤信息、安全模型(包括訪問控制、身份驗證和加密)、執(zhí)行模型(同步或異步)、如何分發(fā)代碼,以及事務模型(COM+ 事務或聲明型事務),等等。這些問題將在即將發(fā)表的體系結構主題(英文)文章中進行討論。
現(xiàn)有代碼提供的數(shù)據(jù)類型
討論現(xiàn)有代碼傳遞的所有數(shù)據(jù)類型的轉換將是一個相當大的工程,因此本文只介紹一些最常用的數(shù)據(jù)類型,以及
XML(作為字符串),因為如果使用 XML 對現(xiàn)有代碼進行擴展,那么 XML
就可以涵蓋幾乎所有其它的數(shù)據(jù)類型。本文討論以下數(shù)據(jù)類型的轉換方法:
ADO 2x Command 對象
ADO2x Recordset 對象
Stream 對象
XMLDOM 對象
XML
ADO 2x Command 對象
直接訪問數(shù)據(jù)庫的現(xiàn)有代碼經(jīng)常會提供 Microsoft ActiveX? 數(shù)據(jù)對象 (ADO) 的 Command
對象。雖然不能在運行于不同進程中的應用程序層之間傳遞 Command 對象,但可以在同一進程內(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 集合轉換為 XML 并返回給 Web 服務的客戶:
' 現(xiàn)有代碼返回 ADO Command 對象
Cmd = CType(EC.Example1(),
ADODB.Command)
' 使用 XmlTextWriter 和 StringWriter 轉換 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ù)傳遞方法。它還可以進行擴展,并提供了一些類型檢查功能。不幸的是,由于 Beta 1 中存在缺陷,Command
對象產(chǎn)生的數(shù)據(jù)無法傳遞到現(xiàn)有代碼。Beta 2 中解決了這個問題。Beta 1 的解決方法是對現(xiàn)有的 VB 6 代碼進行擴展,接受
XML。
ADO2x Recordset 對象
ADO 2x
斷開連接的記錄集通常用于在多層應用程序的各層之間傳遞數(shù)據(jù)。數(shù)據(jù)可以是單行、多行或分層次的行。
讀數(shù)據(jù)
本示例中,現(xiàn)有代碼返回一個 ADO Recordset
對象,它包含的層次行數(shù)據(jù)將被轉換為 XML,然后由 Web 服務返回:
' 現(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
對象
流提供了一種在應用程序的本地層之間傳遞數(shù)據(jù)的有效方法。它是從 Microsoft SQL Server?2000 中讀取
XML 的主要方法。
讀數(shù)據(jù)
以下示例中,現(xiàn)有代碼返回表示層次行數(shù)據(jù)的 XML
流,它被作為字符串讀取,并由 Web 服務返回:
Dim Stream As ADODB.Stream
Stream = CType(EC.Example5(),
adodb.stream)
Example5 = Stream.ReadText
XMLDOM
對象
XMLDOM
對象是一種在多層應用程序的本地層之間傳遞數(shù)據(jù)的好方法。它提供了接口可擴展性、類型檢查和架構驗證功能。
讀數(shù)據(jù)
以下示例中,現(xiàn)有代碼返回一個 XML 文檔對象模型
(XMLDOM),它被轉換為 XML 字符串并由 Web 服務返回:
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 轉換過程推到 COM 互操作邊界的“現(xiàn)有代碼”端,根據(jù)接口的不同,這可能會比在 COM
互操作邊界將數(shù)據(jù)轉換為 XML 更有效。
讀數(shù)據(jù)
以下示例中,現(xiàn)有代碼返回一個包含 XML 數(shù)據(jù)的字符串,然后,該字符串由
Web 服務傳遞給客戶:
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)
總結
本文及附帶的示例介紹了有關數(shù)據(jù)轉換的信息。通過數(shù)據(jù)轉換,可以使用
ASP.NET 將現(xiàn)有代碼作為 Web 服務提供。本文討論了一些常用的接口對象,其中包括 XML
字符串,如果使用相應的接口對現(xiàn)有代碼進行擴展,它可以涵蓋大多數(shù)數(shù)據(jù)。
這些解決方案的性能各異,并且受所傳遞的數(shù)據(jù)大小影響。在本系列后面的文章中,我們將對這些實現(xiàn)方法進行比較。
評估現(xiàn)有代碼是否適合作為 Web 服務時,接口只不過是應當考慮的諸多因素之一。應考慮的其它因素包括安全性(包括授權、身份驗證和加密)、事務模型、狀態(tài)模型、返回錯誤和結果的方式,以及代碼是同步還是異步執(zhí)行,等等。
- 1知識時代的企業(yè)——創(chuàng)建21世紀的組織
- 2IT企業(yè)如何進行上海OA信息化?
- 3上海OA市場2014年市場前景
- 4建筑施工行業(yè)OA辦公軟件、項目管理軟件將是泛普軟件的“菜”
- 5會議跟蹤、公告欄應用辦公自動化軟件OA系統(tǒng)
- 6開展上海OA信息化前必知三大要素
- 7Sun推出網(wǎng)絡服務軟件與微軟一爭高低
- 8年終盤點:協(xié)同上海OA的2013與2014
- 9檔案上海OA信息化的主要觀點與創(chuàng)新、不足
- 10上海市奉賢中等專業(yè)學校辦公OA系統(tǒng)
- 11隱性知識轉化是知識創(chuàng)新的基礎
- 12上海OA信息化不神秘
- 13DAOCHINA的上海OA信息化調查報告
- 14保護XML Web服務免受黑客攻擊 [第一部分] [第二部分]
- 15不同業(yè)務模式下的上海OA信息化策略
- 16上海三問投資控股集團有限公司在線辦公OA系統(tǒng)
- 17泛普OA加速企業(yè)移動信息化普及
- 18上海OA信息化發(fā)展歷程、代表人物和觀點
- 19知識的分類與知識創(chuàng)新的過程
- 20上海OA信息化 從理解開始
- 21集團型企業(yè)為什么導入上海OA信息化
- 22上海OA信息化:七分組織 兩分流程 一分技術
- 23上海OA信息化概要發(fā)展歷程
- 24上海OA信息化與創(chuàng)新
- 25隱性知識的轉化和傳播
- 26APQC上海OA信息化評估方法詳細看
- 27上海OA信息化實施中的PDCA循環(huán)
- 28有生命力的上海OA信息化
- 29Sun 擁有Java, 但是它的Web Service 在哪里?
- 30上海麗漢貿(mào)易有限公司OA辦公系統(tǒng)平臺
成都公司:成都市成華區(qū)建設南路160號1層9號
重慶公司:重慶市江北區(qū)紅旗河溝華創(chuàng)商務大廈18樓