當(dāng)前位置:首頁(yè) > 電源 > 線性電源
[導(dǎo)讀]本文向您介紹了如何使用WebServices和SOAP(SimpleObjectAccessProtocol,簡(jiǎn)單對(duì)象反問(wèn)協(xié)議)進(jìn)行數(shù)據(jù)傳輸,并且通過(guò)討論示例代碼對(duì)在PocketPC上傳輸數(shù)據(jù)的方法進(jìn)行了仔細(xì)分析。需要具備Microsoft®eMbeddedVisua

本文向您介紹了如何使用WebServices和SOAP(SimpleObjectAccessProtocol,簡(jiǎn)單對(duì)象反問(wèn)協(xié)議)進(jìn)行數(shù)據(jù)傳輸,并且通過(guò)討論示例代碼對(duì)在PocketPC上傳輸數(shù)據(jù)的方法進(jìn)行了仔細(xì)分析。

需要具備

Microsoft®eMbeddedVisualTools

PocketPC上的有效Internet連接

如果需要,您可以下載本文中所討論的示例代碼。為了創(chuàng)建測(cè)試示例代碼所需的WebServices,您需要下載SOAPToolkit(SOAPToolkitforMicrosoftVisualStudio6.0)

須知

SOAP規(guī)范(當(dāng)前版本為1.1)仍然是一個(gè)處于提議狀態(tài)的標(biāo)準(zhǔn)并且有可能發(fā)生變化。本文所提供的示例代碼使用了當(dāng)前處于提議狀態(tài)的SOAP規(guī)范,在SOAP規(guī)范發(fā)生修改和變化時(shí),本文中所提供的示例代碼可能需要修改。

該示例代碼使用了SDL(ServicesDescriptionLanguage,服務(wù)描述語(yǔ)言)來(lái)定義WebServices,而SDL即將(有望在2001年的上半年)被最新的WSDL規(guī)范(WebServicesDescriptionLanguage,Web服務(wù)描述語(yǔ)言)所替代。本文中所提供的示例代碼不能同使用WSDL規(guī)范的WebServices配合工作。

支持ADO(MicrosoftActiveXDataObjects)Recordset(我使用的是2.6版本)的XML格式可能會(huì)發(fā)生修改和變化,在XML格式發(fā)生變化時(shí),本文提供的示例代碼也可能需要相應(yīng)修改。

支持的語(yǔ)言

英語(yǔ)

數(shù)據(jù)和WebServices

正如我在由我撰寫(xiě)的另一篇循序漸進(jìn)文章“為Microsoft.NET做好準(zhǔn)備”中所介紹的一樣,您可以在當(dāng)前SOAP規(guī)范的基礎(chǔ)之上,使用WebServices為PocketPC開(kāi)發(fā)程序。

大多數(shù)的商業(yè)應(yīng)用程序都需要在服務(wù)器和客戶(hù)機(jī)應(yīng)用程序之間傳輸數(shù)據(jù)。在一個(gè)傳統(tǒng)的MicrosoftWeb解決方案平臺(tái)(以前被稱(chēng)作MicrosoftWindowsDNA)中,一般使用ADORecordset(ADO記錄集)對(duì)象進(jìn)行數(shù)據(jù)傳輸。因?yàn)樗褂昧艘环N特殊類(lèi)型的“編組”(對(duì)象傳輸),它無(wú)需持有服務(wù)器上的任何“狀態(tài)”(資源)即可被傳輸?shù)娇蛻?hù)端上。有鑒于此,很多現(xiàn)有系統(tǒng)中的組件都采用了這種實(shí)現(xiàn)方式,以ADORecordsets形式返回?cái)?shù)據(jù)。

如果我們又想利用在這些組件上的先前投資,又想獲得應(yīng)用程序同WebServices集成所帶來(lái)的諸多益處,我們就需要找到一種通過(guò)SOAP傳輸這些ADORecordsets的方法。在ChrisDengler所撰寫(xiě)的“利用SOAP消息返回ADORecordset”這篇出色文章中,您可以為在個(gè)人計(jì)算機(jī)上使用WebServices找到一種解決方法。

但是,該解決方案不能被照搬到PocketPC上,因?yàn)锳DOCE(ActiveXDataObjectsforCE)的實(shí)現(xiàn)方式同ADO有所不同。最重要的差別之處在于:ADOCE當(dāng)前(3.1版)不支持持續(xù)性。特別是對(duì)于XML(擴(kuò)展標(biāo)記語(yǔ)言)格式。另一個(gè)不同之處在于:ADOCE不支持我前面所提到過(guò)的記錄集編組。因此,它不能為動(dòng)態(tài)創(chuàng)建“連接斷開(kāi)”(沒(méi)有到數(shù)據(jù)源的活動(dòng)連接)狀態(tài)下的記錄集提供支持。

無(wú)處不在的WebServices數(shù)據(jù)

在當(dāng)前版本的ADOCE(V3.1)中,我們必須找到另一種處理WebService(SOAP)調(diào)用返回?cái)?shù)據(jù)的方法。在本文中,我將同大家對(duì)一些示例代碼進(jìn)行探討,看看如何使用從一個(gè)SOAP響應(yīng)中返回的數(shù)據(jù)。該示例假定Recordset(記錄集)按照ChrisDengler文中所介紹的Solution2封裝方式進(jìn)行封裝。因?yàn)镃hris在他的文章中已經(jīng)對(duì)這種解決方案的實(shí)現(xiàn)方式進(jìn)行了詳細(xì)描述,在本文中我就不再對(duì)所需的服務(wù)器端代碼多加敘述了。

一個(gè)測(cè)試客戶(hù)端程序

在我們開(kāi)始討論代碼之前,讓我們首先了解一下使用WebServices傳輸數(shù)據(jù)對(duì)我們有哪些好處。在下面這個(gè)窗體中,我創(chuàng)建了一個(gè)簡(jiǎn)單的測(cè)試用客戶(hù)端程序,該程序?qū)蓚€(gè)不同的WebServices結(jié)合到了一個(gè)MicrosofteMbeddedVisualBasic應(yīng)用程序之中。:

SOAP客戶(hù)端測(cè)試程序示例

窗體頂部的TextBox(文本框)用來(lái)選擇所需的WebService(描述)。這個(gè)URI(UniversalResourceIdentifier)是使用SOAPToolkitWizard創(chuàng)建的SDL(服務(wù)描述語(yǔ)言,ServicesDescriptionLanguage)文件。

我已經(jīng)創(chuàng)建了第一個(gè)WebService,您可以調(diào)用這個(gè)WebService(使用頂部的“Get”按鈕),這個(gè)WebService主要用于測(cè)試目的。它調(diào)用一個(gè)簡(jiǎn)單的WebService,將您提交的名和姓作為參數(shù)連接到了一個(gè)包含完整名稱(chēng)的字符串中。

當(dāng)您輸入一個(gè)已經(jīng)在服務(wù)器上進(jìn)行了定義的DSN(數(shù)據(jù)源名稱(chēng))以及一個(gè)針對(duì)該DSN的SQL(結(jié)構(gòu)化查詢(xún)語(yǔ)言)查詢(xún),然后點(diǎn)擊“Get”按鈕時(shí),它開(kāi)始變得更有意思了。DSN和SQL作為一個(gè)參數(shù)傳遞給了WebService,然后以XML格式返回一個(gè)ADORecordset。數(shù)據(jù)經(jīng)過(guò)分析后,填充在窗體底部的ListView控件中。

在正確對(duì)服務(wù)器進(jìn)行了設(shè)置的前提下,現(xiàn)在,您可以方便地訪問(wèn)您的企業(yè)數(shù)據(jù)了。您無(wú)需任何第三方產(chǎn)品--甚至不使用ADOCE--即可輕松做到這一點(diǎn)。對(duì)此,我的一位同事說(shuō),“這實(shí)在令人驚訝!”

代碼討論

以下代碼為cmdGetRecordset_Click事件的代碼(當(dāng)您按下窗體底部的“Get”按鈕時(shí)運(yùn)行):

DimlavParameters(2)AsVariant

DimlsAsString

DimlitmAsListItem

DimiAsInteger

'Setparameters

lavParameters(1)=txtDSN.Text

lavParameters(2)=txtSQL.Text

'MakeSOAPCall

ls=SOAPCall(txtURI.Text,"GetRecordset",lavParameters,chkShowPackets=1)

'ClearandaddListViewheadings

lvwRecordset.ColumnHeaders.Clear

lvwRecordset.ColumnHeaders.Add1,,"ArtNo",700

lvwRecordset.ColumnHeaders.Add2,,"Description",1450

lvwRecordset.ColumnHeaders.Add3,,"Price",850,lvwColumnRight

'ClearandfillListViewfromXML(withRecordsetEmulation)

lvwRecordset.ListItems.Clear

XMLRSOpenls

DoWhileNotXMLRSEOF

Setlitm=lvwRecordset.ListItems.Add(,,XMLRS("ArticleNo"))

[!--empirenews.page--]

litm.SubItems(1)=XMLRS("Description")

litm.SubItems(2)=XMLRS("Price")

XMLRSMoveNext

Loop

XMLRSClose

代碼說(shuō)明:

傳遞給SOAP方法的兩個(gè)參數(shù)(DNS和SQL)是從TextBox控件中取得的,其返回值是XML格式的ADO數(shù)據(jù)集。如需了解同SOAPCall函數(shù)及其參數(shù)有關(guān)的更詳細(xì)信息,請(qǐng)參閱我的循序漸進(jìn)文章“為Microsoft.NET做好準(zhǔn)備”。

正如您看到的,整個(gè)實(shí)現(xiàn)方式類(lèi)似于ADORecordset的使用方式(簡(jiǎn)化了代碼復(fù)用)。以“XMLRS…”開(kāi)始的這些函數(shù)保存在XMLRS.bas模塊,讓我們深入到模塊內(nèi)部看一下。以下是XMLRSOpen函數(shù)中的一部分代碼:

'CreateDOMobject

SetpoXML=CreateObject("Microsoft.XMLDOM")

'Loadstring

psXML=XML

'LoadDOM

poXML.loadXMLpsXML

'Positiondatanodes

SetpoDataNodes=poXML.documentElement.selectNodes("//rs:data")

SetpoDataNodes=poDataNodes.Item(0).childnodes

代碼說(shuō)明:

psXML變量用來(lái)存放ADORecordset的XML表述。

PoXML變量是XMLDOM對(duì)象,用來(lái)存放記錄集數(shù)據(jù)。

PoDataNodes變量保存所有記錄集數(shù)據(jù)行的XML元素。

我們現(xiàn)在有了一個(gè)對(duì)象,該對(duì)象包含了記錄集中的所有數(shù)據(jù)行,它就是我們開(kāi)始數(shù)據(jù)導(dǎo)航所需要的東西。我們可以使用XMLRSMoveFirst和XMLRSMoveNext函數(shù)進(jìn)行數(shù)據(jù)導(dǎo)航。下面讓我們仔細(xì)考察一下XMLRSMoveNext函數(shù):

'ChecknotEOF

IfNotXMLRSEOF()Then

'Increasepointer

piRecordPos=piRecordPos+1

EndIf

為了理解整個(gè)程序邏輯,讓我們看看XMLRSEOF函數(shù):

'CheckEOF

IfpiRecordPos>poDataNodes.length-1ThenXMLRSEOF=True

現(xiàn)在,我們需要知道如何取出實(shí)際數(shù)據(jù),完成這一工作的是XMLRS:

'Checkiffieldnumberorfieldname

IfIsNumeric(FieldID)Then

'GetFieldData

XMLRS=poDataNodes(piRecordPos).Attributes(FieldID).Text

Else

'GetFieldData

XMLRS=poDataNodes(piRecordPos).Attributes.getNamedItem(FieldID).Text

EndIf

正如您所看到的,我們可以提供一個(gè)字段名(就像我在窗體代碼中所做的)以及一個(gè)字段序號(hào)

如需了解更多詳細(xì)信息,我建議您認(rèn)真閱讀完整的示例的代碼。

助你上路

您應(yīng)該仔細(xì)分析XMLRS.bas模塊,我在此只提供了幾個(gè)必需的函數(shù)。以便您能很快上手。當(dāng)然,我們還應(yīng)該實(shí)現(xiàn)更多的ADORecordset功能。因?yàn)樵撃K使用了XMLDOM對(duì)象,您需要具有一些XML知識(shí)。

當(dāng)然,這并不是一個(gè)解決這個(gè)問(wèn)題的“企業(yè)級(jí)”解決方案。我希望ADOCE能在將來(lái)在Recordset(或者類(lèi)似構(gòu)造)中加入對(duì)XML的支持,這樣就不用再使用XMLRS.bas模塊了。如果容量發(fā)生了變化,只需對(duì)我提供的這些代碼做一些小的修改即可,從而保護(hù)了您的前期投資和工作。

同時(shí),如果您決定在該模塊的基礎(chǔ)上完成一些開(kāi)發(fā)工作,您可以同我聯(lián)系。我將利用您完成的增強(qiáng)版本對(duì)本文所介紹的示例代碼進(jìn)行升級(jí)。這將極大地增加您的知名度!

未來(lái)會(huì)怎樣

我相信,在不遠(yuǎn)的將來(lái),所有的.NET特性都將在PocketPC得到應(yīng)用。其中可能包括類(lèi)似“連接斷開(kāi)”式ADORecordsets和XML支持這樣一些特性。我甚至相信,將ADORecordset數(shù)據(jù)(XML)封裝進(jìn)SOAP調(diào)用這一過(guò)程對(duì)開(kāi)發(fā)人員來(lái)說(shuō)將是透明的。

您可以修改XMLRS.bas以使其適應(yīng)新的XML數(shù)據(jù)集結(jié)構(gòu),您也可以簡(jiǎn)單地對(duì)代碼進(jìn)行升級(jí),使用Recordset功能代替XMLRS中的函數(shù)。

小結(jié)

從任何地方對(duì)企業(yè)數(shù)據(jù)加以訪問(wèn)的能力所蘊(yùn)藏的能量是異常巨大的。在多層解決方案(帶有組件)中,您可以允許您的業(yè)務(wù)邏輯被世界各地的用戶(hù)所使用,甚至是那些無(wú)線用戶(hù)。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車(chē)的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車(chē)技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車(chē)工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車(chē)。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車(chē) 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶(hù)希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱(chēng),數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱(chēng)"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉