當前位置:工程項目OA系統(tǒng) > 泛普各地 > 河北O(jiān)A系統(tǒng) > 石家莊OA系統(tǒng) > 石家莊OA信息化
.NET的數(shù)據(jù)傳輸之道
.NET的數(shù)據(jù)傳輸之道
本文向您介紹了如何使用Web Services和SOAP(Simple Object Access
Protocol,簡單對象反問協(xié)議)進行數(shù)據(jù)傳輸,并且通過討論示例代碼對在Pocket PC上傳輸數(shù)據(jù)的方法進行了仔細分析。
需要具備
Microsoft? eMbedded Visual Tools
Pocket PC上的有效Internet連接
如果需要,您可以下載本文中所討論的示例代碼。為了創(chuàng)建測試示例代碼所需的Web Services ,您需要下載SOAP Toolkit(SOAP
Toolkit for Microsoft Visual Studio 6.0)
須知
SOAP規(guī)范(當前版本為1.1)仍然是一個處于提議狀態(tài)的標準并且有可能發(fā)生變化。本文所提供的示例代碼使用了當前處于提議狀態(tài)的SOAP規(guī)范,在SOAP規(guī)范發(fā)生修改和變化時,本文中所提供的示例代碼可能需要修改。
該示例代碼使用了SDL(Services Description Language,服務(wù)描述語言)來定義Web Services,而SDL即將(有望在2001年的上半年)被最新的WSDL規(guī)范(Web Services Description Language,Web服務(wù)描述語言)所替代。本文中所提供的示例代碼不能同使用WSDL規(guī)范的Web Services配合工作。
支持ADO(Microsoft ActiveX Data Objects)Recordset(我使用的是2.6版本)的XML格式可能會發(fā)生修改和變化,在XML格式發(fā)生變化時,本文提供的示例代碼也可能需要相應(yīng)修改。
支持的語言
英語
數(shù)據(jù)和Web Services
正如我在由我撰寫的另一篇循序漸進文章“為Microsoft .NET做好準備”中所介紹的一樣,您可以在當前SOAP規(guī)范的基礎(chǔ)之上,使用Web Services為Pocket PC開發(fā)程序。
大多數(shù)的商業(yè)應(yīng)用程序都需要在服務(wù)器和客戶機應(yīng)用程序之間傳輸數(shù)據(jù)。在一個傳統(tǒng)的Microsoft Web解決方案平臺(以前被稱作Microsoft Windows DNA)中,一般使用ADO Recordset(ADO記錄集)對象進行數(shù)據(jù)傳輸。因為它使用了一種特殊類型的“編組”(對象傳輸),它無需持有服務(wù)器上的任何“狀態(tài)”(資源)即可被傳輸?shù)娇蛻舳松?。有鑒于此,很多現(xiàn)有系統(tǒng)中的組件都采用了這種實現(xiàn)方式,以ADO Recordsets形式返回數(shù)據(jù)。
如果我們又想利用在這些組件上的先前投資,又想獲得應(yīng)用程序同Web Services集成所帶來的諸多益處,我們就需要找到一種通過SOAP傳輸這些ADO Recordsets的方法。在Chris Dengler所撰寫的“利用SOAP消息返回ADO Recordset”這篇出色文章中,您可以為在個人計算機上使用Web Services找到一種解決方法。
但是,該解決方案不能被照搬到Pocket PC上,因為ADOCE(ActiveX Data Objects for CE)的實現(xiàn)方式同ADO有所不同。最重要的差別之處在于:ADOCE當前(3.1版)不支持持續(xù)性。特別是對于XML(擴展標記語言)格式。另一個不同之處在于:ADOCE不支持我前面所提到過的記錄集編組。因此,它不能為動態(tài)創(chuàng)建“連接斷開”(沒有到數(shù)據(jù)源的活動連接)狀態(tài)下的記錄集提供支持。
無處不在的Web Services數(shù)據(jù)
在當前版本的ADOCE(V3.1)中,我們必須找到另一種處理Web Service(SOAP)調(diào)用返回數(shù)據(jù)的方法。在本文中,我將同大家對一些示例代碼進行探討,看看如何使用從一個SOAP響應(yīng)中返回的數(shù)據(jù)。該示例假定Recordset(記錄集)按照Chris Dengler文中所介紹的Solution 2封裝方式進行封裝。因為Chris在他的文章中已經(jīng)對這種解決方案的實現(xiàn)方式進行了詳細描述,在本文中我就不再對所需的服務(wù)器端代碼多加敘述了。
一個測試客戶端程序
在我們開始討論代碼之前,讓我們首先了解一下使用Web Services傳輸數(shù)據(jù)對我們有哪些好處。在下面這個窗體中,我創(chuàng)建了一個簡單的測試用客戶端程序,該程序?qū)蓚€不同的Web Services結(jié)合到了一個Microsoft eMbedded Visual Basic 應(yīng)用程序之中。
SOAP客戶端測試程序示例
窗體頂部的TextBox(文本框)用來選擇所需的Web Service(描述)。這個URI (Universal Resource Identifier)是使用SOAP Toolkit Wizard創(chuàng)建的SDL(服務(wù)描述語言,Services Description Language)文件。
我已經(jīng)創(chuàng)建了第一個Web Service,您可以調(diào)用這個Web Service (使用頂部的“Get”按鈕),這個Web Service 主要用于測試目的。它調(diào)用一個簡單的Web Service,將您提交的名和姓作為參數(shù)連接到了一個包含完整名稱的字符串中。
當您輸入一個已經(jīng)在服務(wù)器上進行了定義的DSN(數(shù)據(jù)源名稱)以及一個針對該DSN的SQL(結(jié)構(gòu)化查詢語言)查詢,然后點擊“Get”按鈕時,它開始變得更有意思了。DSN和SQL作為一個參數(shù)傳遞給了Web Service,然后以XML格式返回一個ADO Recordset。數(shù)據(jù)經(jīng)過分析后,填充在窗體底部的ListView控件中。
在正確對服務(wù)器進行了設(shè)置的前提下,現(xiàn)在,您可以方便地訪問您的企業(yè)數(shù)據(jù)了。您無需任何第三方產(chǎn)品--甚至不使用ADOCE--即可輕松做到這一點。對此,我的一位同事說,“這實在令人驚訝!”
代碼討論
以下代碼為cmdGetRecordset_Click事件的代碼(當您按下窗體底部的“Get”按鈕時運行):
Dim lavParameters(2) As Variant
Dim ls As
String
Dim litm As ListItem
Dim i As Integer
' Set parameters
lavParameters(1) =
txtDSN.Text
lavParameters(2) = txtSQL.Text
' Make SOAP Call
ls = SOAPCall(txtURI.Text,
"GetRecordset", lavParameters, chkShowPackets = 1)
' Clear and add ListView
headings
lvwRecordset.ColumnHeaders.Clear
lvwRecordset.ColumnHeaders.Add
1, , "ArtNo", 700
lvwRecordset.ColumnHeaders.Add 2, , "Description",
1450
lvwRecordset.ColumnHeaders.Add 3, , "Price", 850,
lvwColumnRight
' Clear and fill ListView from XML (with Recordset
Emulation)
lvwRecordset.ListItems.Clear
XMLRSOpen ls
Do
While Not XMLRSEOF
Set litm = lvwRecordset.ListItems.Add(, ,
XMLRS("ArticleNo"))
litm.SubItems(1) =
XMLRS("Description")
litm.SubItems(2) = XMLRS("Price")
XMLRSMoveNext
Loop
XMLRSClose
代碼說明:
傳遞給SOAP方法的兩個參數(shù)(DNS和SQL)是從TextBox控件中取得的,其返回值是XML格式的ADO數(shù)據(jù)集。如需了解同SOAPCall函數(shù)及其參數(shù)有關(guān)的更詳細信息,請參閱我的循序漸進文章“為Microsoft .NET做好準備”。
正如您看到的,整個實現(xiàn)方式類似于ADO Recordset的使用方式(簡化了代碼復(fù)用)。以“XMLRS…”開始的這些函數(shù)保存在XMLRS.bas模塊,讓我們深入到模塊內(nèi)部看一下。以下是XMLRSOpen 函數(shù)中的一部分代碼:
' Create DOM object
Set poXML =
CreateObject("Microsoft.XMLDOM")
' Load string
psXML = XML
' Load DOM
poXML.loadXML psXML
' Position data nodes
Set poDataNodes =
poXML.documentElement.selectNodes("http://rs:data")
Set poDataNodes =
poDataNodes.Item(0).childnodes
代碼說明:
psXML變量用來存放ADO Recordset 的XML表述。
PoXML變量是XML
DOM對象,用來存放記錄集數(shù)據(jù)。
PoDataNodes變量保存所有記錄集數(shù)據(jù)行的XML元素。
我們現(xiàn)在有了一個對象,該對象包含了記錄集中的所有數(shù)據(jù)行,它就是我們開始數(shù)據(jù)導(dǎo)航所需要的東西。我們可以使用XMLRSMoveFirst和XMLRSMoveNext函數(shù)進行數(shù)據(jù)導(dǎo)航。下面讓我們仔細考察一下XMLRSMoveNext
函數(shù):
' Check not EOF
If Not XMLRSEOF() Then
' Increase
pointer
piRecordPos = piRecordPos + 1
End If
為了理解整個程序邏輯,讓我們看看XMLRSEOF函數(shù):
' Check EOF
If piRecordPos > poDataNodes.length - 1
Then XMLRSEOF = True
現(xiàn)在,我們需要知道如何取出實際數(shù)據(jù),完成這一工作的是XMLRS:
' Check if field number or field name
If
IsNumeric(FieldID) Then
' Get Field Data
XMLRS =
poDataNodes(piRecordPos).Attributes(FieldID).Text
Else
' Get Field
Data
XMLRS =
poDataNodes(piRecordPos).Attributes.getNamedItem(FieldID).Text
End If
正如您所看到的,我們可以提供一個字段名(就像我在窗體代碼中所做的)以及一個字段序號
如需了解更多詳細信息,我建議您認真閱讀完整的示例的代碼。
助你上路
您應(yīng)該仔細分析XMLRS.bas模塊,我在此只提供了幾個必需的函數(shù)。以便您能很快上手。當然,我們還應(yīng)該實現(xiàn)更多的ADO Recordset功能。因為該模塊使用了XML DOM對象,您需要具有一些XML知識。
當然,這并不是一個解決這個問題的“企業(yè)級”解決方案。我希望ADOCE能在將來在Recordset(或者類似構(gòu)造)中加入對XML的支持,這樣就不用再使用XMLRS.bas模塊了。如果容量發(fā)生了變化,只需對我提供的這些代碼做一些小的修改即可,從而保護了您的前期投資和工作。
同時,如果您決定在該模塊的基礎(chǔ)上完成一些開發(fā)工作,您可以同我聯(lián)系。我將利用您完成的增強版本對本文所介紹的示例代碼進行升級。這將極大地增加您的知名度!
未來會怎樣
我相信,在不遠的將來,所有的.NET特性都將在Pocket PC得到應(yīng)用。其中可能包括類似“連接斷開”式ADO Recordsets和XML支持這樣一些特性。我甚至相信,將ADO Recordset數(shù)據(jù)(XML)封裝進SOAP調(diào)用這一過程對開發(fā)人員來說將是透明的。
您可以修改XMLRS.bas以使其適應(yīng)新的XML數(shù)據(jù)集結(jié)構(gòu),您也可以簡單地對代碼進行升級,使用Recordset功能代替XMLRS中的函數(shù)。
小結(jié)
從任何地方對企業(yè)數(shù)據(jù)加以訪問的能力所蘊藏的能量是異常巨大的。在多層解決方案(帶有組件)中,您可以允許您的業(yè)務(wù)邏輯被世界各地的用戶所使用,甚至是那些無線用戶。
- 1亞馬遜學(xué)習(xí)eBay推網(wǎng)絡(luò)服務(wù)計劃 免費為他人推廣
- 2IBM WebSphere vs. 微軟.NET:誰將獲得勝利?
- 3為企業(yè)開啟Web服務(wù)之門-Sun ONE軟件產(chǎn)品發(fā)布會在京舉行
- 4面向服務(wù)的應(yīng)用集成——EAI和Web服務(wù)
- 5知識庫建設(shè)應(yīng)規(guī)避的5點具體誤區(qū)
- 6Web服務(wù)內(nèi)幕,第8部分:關(guān)于Soap的決策
- 7復(fù)明集團網(wǎng)上審批管理OA辦公軟件系統(tǒng)系統(tǒng) V1.0 ...
- 8xml and KM
- 9將Web服務(wù)用于電子交易的單點登錄
- 10第五項修煉簡要目錄
- 11石家莊OA信息化:挖掘企業(yè)的隱藏資源(姜鐵虎)
- 12Sun等公布Web服務(wù)協(xié)調(diào)語言“WSCI”
- 13追問石家莊OA信息化(高麗華)
- 14一個副總裁的辭呈:癱瘓的信息化系統(tǒng)和人心
- 15架構(gòu)Web Service:什么是Web服務(wù)?
- 16互聯(lián)網(wǎng)聯(lián)盟(W3C )發(fā)布Web服務(wù)體系新規(guī)范草案
- 17OA支持工作流報表的格式自定義——通過工作流報表
- 18石家莊泛普OA辦公軟件的用戶界面定制
- 19由 80/20 法則突破「知識分享」的心防
- 20Ask the DotNetJunkies: Consuming Remote Web Services in ASP.
- 21Consuming a Web Service from a Win Form Application
- 22泛普OA個性化門戶主要提供了基于用戶的門戶個性化流程
- 23信息時代的組織智商
- 24無SOAP的Web服務(wù),第一部分
- 25OA網(wǎng)絡(luò)辦公系統(tǒng)信息傳遞的安全解決方案
- 26炎黃盈動AWS石家莊OA信息化應(yīng)用套件
- 27Accessing Server Variables From Within Web Services
- 28W3C加速語義網(wǎng)和Web服務(wù)方案開發(fā)
- 29Web服務(wù)設(shè)計師,第6部分:基于付費的Web服務(wù)的催化劑
- 30石家莊OA信息化的“三四五六七”(by AMT 石家莊OA信息化小組)
成都公司:成都市成華區(qū)建設(shè)南路160號1層9號
重慶公司:重慶市江北區(qū)紅旗河溝華創(chuàng)商務(wù)大廈18樓
版權(quán)所有:泛普軟件 渝ICP備14008431號-2 渝公網(wǎng)安備50011202501700號 咨詢電話:400-8352-114