当前位置:首页 > 电源 > 线性电源
[导读]本文向您介绍了如何使用WebServices和SOAP(SimpleObjectAccessProtocol,简单对象反问协议)进行数据传输,并且通过讨论示例代码对在PocketPC上传输数据的方法进行了仔细分析。需要具备Microsoft®eMbeddedVisua

本文向您介绍了如何使用WebServices和SOAP(SimpleObjectAccessProtocol,简单对象反问协议)进行数据传输,并且通过讨论示例代码对在PocketPC上传输数据的方法进行了仔细分析。

需要具备

Microsoft®eMbeddedVisualTools

PocketPC上的有效Internet连接

如果需要,您可以下载本文中所讨论的示例代码。为了创建测试示例代码所需的WebServices,您需要下载SOAPToolkit(SOAPToolkitforMicrosoftVisualStudio6.0)

须知

SOAP规范(当前版本为1.1)仍然是一个处于提议状态的标准并且有可能发生变化。本文所提供的示例代码使用了当前处于提议状态的SOAP规范,在SOAP规范发生修改和变化时,本文中所提供的示例代码可能需要修改。

该示例代码使用了SDL(ServicesDescriptionLanguage,服务描述语言)来定义WebServices,而SDL即将(有望在2001年的上半年)被最新的WSDL规范(WebServicesDescriptionLanguage,Web服务描述语言)所替代。本文中所提供的示例代码不能同使用WSDL规范的WebServices配合工作。

支持ADO(MicrosoftActiveXDataObjects)Recordset(我使用的是2.6版本)的XML格式可能会发生修改和变化,在XML格式发生变化时,本文提供的示例代码也可能需要相应修改。

支持的语言

英语

数据和WebServices

正如我在由我撰写的另一篇循序渐进文章“为Microsoft.NET做好准备”中所介绍的一样,您可以在当前SOAP规范的基础之上,使用WebServices为PocketPC开发程序。

大多数的商业应用程序都需要在服务器和客户机应用程序之间传输数据。在一个传统的MicrosoftWeb解决方案平台(以前被称作MicrosoftWindowsDNA)中,一般使用ADORecordset(ADO记录集)对象进行数据传输。因为它使用了一种特殊类型的“编组”(对象传输),它无需持有服务器上的任何“状态”(资源)即可被传输到客户端上。有鉴于此,很多现有系统中的组件都采用了这种实现方式,以ADORecordsets形式返回数据。

如果我们又想利用在这些组件上的先前投资,又想获得应用程序同WebServices集成所带来的诸多益处,我们就需要找到一种通过SOAP传输这些ADORecordsets的方法。在ChrisDengler所撰写的“利用SOAP消息返回ADORecordset”这篇出色文章中,您可以为在个人计算机上使用WebServices找到一种解决方法。

但是,该解决方案不能被照搬到PocketPC上,因为ADOCE(ActiveXDataObjectsforCE)的实现方式同ADO有所不同。最重要的差别之处在于:ADOCE当前(3.1版)不支持持续性。特别是对于XML(扩展标记语言)格式。另一个不同之处在于:ADOCE不支持我前面所提到过的记录集编组。因此,它不能为动态创建“连接断开”(没有到数据源的活动连接)状态下的记录集提供支持。

无处不在的WebServices数据

在当前版本的ADOCE(V3.1)中,我们必须找到另一种处理WebService(SOAP)调用返回数据的方法。在本文中,我将同大家对一些示例代码进行探讨,看看如何使用从一个SOAP响应中返回的数据。该示例假定Recordset(记录集)按照ChrisDengler文中所介绍的Solution2封装方式进行封装。因为Chris在他的文章中已经对这种解决方案的实现方式进行了详细描述,在本文中我就不再对所需的服务器端代码多加叙述了。

一个测试客户端程序

在我们开始讨论代码之前,让我们首先了解一下使用WebServices传输数据对我们有哪些好处。在下面这个窗体中,我创建了一个简单的测试用客户端程序,该程序将两个不同的WebServices结合到了一个MicrosofteMbeddedVisualBasic应用程序之中。:

SOAP客户端测试程序示例

窗体顶部的TextBox(文本框)用来选择所需的WebService(描述)。这个URI(UniversalResourceIdentifier)是使用SOAPToolkitWizard创建的SDL(服务描述语言,ServicesDescriptionLanguage)文件。

我已经创建了第一个WebService,您可以调用这个WebService(使用顶部的“Get”按钮),这个WebService主要用于测试目的。它调用一个简单的WebService,将您提交的名和姓作为参数连接到了一个包含完整名称的字符串中。

当您输入一个已经在服务器上进行了定义的DSN(数据源名称)以及一个针对该DSN的SQL(结构化查询语言)查询,然后点击“Get”按钮时,它开始变得更有意思了。DSN和SQL作为一个参数传递给了WebService,然后以XML格式返回一个ADORecordset。数据经过分析后,填充在窗体底部的ListView控件中。

在正确对服务器进行了设置的前提下,现在,您可以方便地访问您的企业数据了。您无需任何第三方产品--甚至不使用ADOCE--即可轻松做到这一点。对此,我的一位同事说,“这实在令人惊讶!”

代码讨论

以下代码为cmdGetRecordset_Click事件的代码(当您按下窗体底部的“Get”按钮时运行):

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

代码说明:

传递给SOAP方法的两个参数(DNS和SQL)是从TextBox控件中取得的,其返回值是XML格式的ADO数据集。如需了解同SOAPCall函数及其参数有关的更详细信息,请参阅我的循序渐进文章“为Microsoft.NET做好准备”。

正如您看到的,整个实现方式类似于ADORecordset的使用方式(简化了代码复用)。以“XMLRS…”开始的这些函数保存在XMLRS.bas模块,让我们深入到模块内部看一下。以下是XMLRSOpen函数中的一部分代码:

'CreateDOMobject

SetpoXML=CreateObject("Microsoft.XMLDOM")

'Loadstring

psXML=XML

'LoadDOM

poXML.loadXMLpsXML

'Positiondatanodes

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

SetpoDataNodes=poDataNodes.Item(0).childnodes

代码说明:

psXML变量用来存放ADORecordset的XML表述。

PoXML变量是XMLDOM对象,用来存放记录集数据。

PoDataNodes变量保存所有记录集数据行的XML元素。

我们现在有了一个对象,该对象包含了记录集中的所有数据行,它就是我们开始数据导航所需要的东西。我们可以使用XMLRSMoveFirst和XMLRSMoveNext函数进行数据导航。下面让我们仔细考察一下XMLRSMoveNext函数:

'ChecknotEOF

IfNotXMLRSEOF()Then

'Increasepointer

piRecordPos=piRecordPos+1

EndIf

为了理解整个程序逻辑,让我们看看XMLRSEOF函数:

'CheckEOF

IfpiRecordPos>poDataNodes.length-1ThenXMLRSEOF=True

现在,我们需要知道如何取出实际数据,完成这一工作的是XMLRS:

'Checkiffieldnumberorfieldname

IfIsNumeric(FieldID)Then

'GetFieldData

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

Else

'GetFieldData

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

EndIf

正如您所看到的,我们可以提供一个字段名(就像我在窗体代码中所做的)以及一个字段序号

如需了解更多详细信息,我建议您认真阅读完整的示例的代码。

助你上路

您应该仔细分析XMLRS.bas模块,我在此只提供了几个必需的函数。以便您能很快上手。当然,我们还应该实现更多的ADORecordset功能。因为该模块使用了XMLDOM对象,您需要具有一些XML知识。

当然,这并不是一个解决这个问题的“企业级”解决方案。我希望ADOCE能在将来在Recordset(或者类似构造)中加入对XML的支持,这样就不用再使用XMLRS.bas模块了。如果容量发生了变化,只需对我提供的这些代码做一些小的修改即可,从而保护了您的前期投资和工作。

同时,如果您决定在该模块的基础上完成一些开发工作,您可以同我联系。我将利用您完成的增强版本对本文所介绍的示例代码进行升级。这将极大地增加您的知名度!

未来会怎样

我相信,在不远的将来,所有的.NET特性都将在PocketPC得到应用。其中可能包括类似“连接断开”式ADORecordsets和XML支持这样一些特性。我甚至相信,将ADORecordset数据(XML)封装进SOAP调用这一过程对开发人员来说将是透明的。

您可以修改XMLRS.bas以使其适应新的XML数据集结构,您也可以简单地对代码进行升级,使用Recordset功能代替XMLRS中的函数。

小结

从任何地方对企业数据加以访问的能力所蕴藏的能量是异常巨大的。在多层解决方案(带有组件)中,您可以允许您的业务逻辑被世界各地的用户所使用,甚至是那些无线用户。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

深圳2024年4月17日 /美通社/ -- 今日,华为举办全球分析师大会,在"加速迈向网络智能化"主题论坛中,华为数据通信产品线副总裁赵志鹏发表了主题演讲,阐述了华为全面引入AI技术,从组件级、任务级...

关键字: NET 华为 智能化 网络

德国斯图加特和加利福尼亚州普莱森顿2024年4月16日 /美通社/ -- 全球高科技设施设计、工程和交付的领先企业Exyte宣布,计划收购全球领先的安装服务、设备和技术设施管理提供商—Kinetics集团(简称"Kine...

关键字: NET TI TE IC

随着科技的飞速发展,电子设备间的连接与数据传输变得越来越重要。Type-C转接头作为连接各种设备的桥梁,其性能与标准也不断升级。本文将详细探讨Type-C转接头2.0与3.1之间的区别,帮助读者更好地理解和选择适合自己的...

关键字: 电子设备 数据传输 Type-C

随着科技的不断进步,移动通信技术也迎来了飞速的发展。从最初的2G时代到如今的5G时代,每一次技术的升级都为我们带来了更快捷、更便利的通信体验。作为最新一代的移动通信技术,5G以其超高速率、低时延和大连接数的特点,正逐步改...

关键字: 移动通信 数据传输 5G

随着信息技术的飞速发展,数据通信作为连接世界的桥梁,其重要性日益凸显。为了确保数据通信的高效、稳定和可靠,我们需要关注一系列关键的技术指标。本文将深入解析数据通信的主要技术指标,并探讨其前沿发展。

关键字: 数据通信 数据传输

2023年10月18日,中国在第三届“一带一路”国际合作高峰论坛期间发布《全球人工智能治理倡议》,围绕人工智能发展、安全、治理三方面系统阐述了人工智能治理中国方案。

关键字: 人工智能 大模型 代码

船载通信系统是现代船舶中不可或缺的重要组成部分,它为船舶提供了与外界通信和数据传输的渠道。船载通信系统行业设计方案涵盖了多个方面,包括系统架构、硬件设备、软件系统、通信协议等。本文将详细介绍船载通信系统的行业设计方案。

关键字: 船载通信 数据传输 通信协议

12月22日,由广州日报主办的2023年高质量发展年度峰会在广州举行。OPPO凭借持续创新和技术积累,入选2023年广东创新TOP100榜10强,展现出在科技创新领域的领先实力。

关键字: 智能手机 数据传输

短距离无线通信技术是一种利用无线电波进行数据传输的技术,适用于距离较短、对传输速率要求不高的场景。近年来,随着物联网、智能家居等技术的不断发展,短距离无线通信技术也得到了广泛应用。本文将对常见的短距离无线通信技术进行介绍...

关键字: 无线通信 数据传输 物联网

我们看到这么多的安全问题,部分原因在于我们对待安全的方式:安全性通常被认为是事后考虑的问题,是在开发结束时才添加到设备上的东西。然而,复杂的系统,尤其是嵌入式系统,有一个很大的攻击面,这让攻击者有机可乘,能够在“盔甲”上...

关键字: 代码 嵌入式系统 软件漏洞
关闭
关闭