MicroSOFt®eMbeddedVisualTools
PocketPC上的有效Internet连接
如果需要,您可以下载本文中所讨论的示例代码。为了创建测试示例代码所需的WebServices,您需要下载SOAPToolkit(SOAPToolkitforMicrosoftVisualStudio60)
须知
SOAP规范(当前版本为11)仍然是一个处于提议状态的标准并且有可能发生变化。本文所提供的示例代码使用了当前处于提议状态的SOAP规范,在SOAP规范发生修改和变化时,本文中所提供的示例代码可能需要修改。
该示例代码使用了SDL(ServicESDescriptionLanguage,服务描述语言)来定义WebServices,而SDL即将(有望在2001年的上半年)被最新的WSDL规范(WebServicesDescriptionLanguage,Web服务描述语言)所替代。本文中所提供的示例代码不能同使用WSDL规范的WebServices配合工作。
支持ADO(MicrosoftActiveXDataObjects)Recordset(我使用的是26版本)的XML格式可能会发生修改和变化,在XML格式发生变化时,本文提供的示例代码也可能需要相应修改。
支持的语言
英语
数据和WebServices
正如我在由我撰写的另一篇循序渐进文章“为MicrosoftNET做好准备”中所介绍的一样,您可以在当前SOAP规范的基础之上,使用WebServices为PocketPC开发程序。
大多数的商业应用程序都需要在服务器和客户机应用程序之间传输数据。在一个传统的MicrosoftWeb解决方案平台(以前被称作MicrosoftWindowsDNA)中,一般使用ADORecordset(ADO记录集)对象进行数据传输。因为它使用了一种特殊类型的“编组”(对象传输),它无需持有服务器上的任何“状态”(资源)即可被传输到客户端上。有鉴于此,很多现有系统中的组件都采用了这种实现方式,以ADORecordsets形式返回数据。
如果我们又想利用在这些组件上的先前投资,又想获得应用程序同WebServices集成所带来的诸多益处,我们就需要找到一种通过SOAP传输这些ADORecordsets的方法。在ChrisDengler所撰写的“利用SOAP消息返回ADORecordset”这篇出色文章中,您可以为在个人计算机上使用WebServices找到一种解决方法。
但是,该解决方案不能被照搬到PocketPC上,因为ADOCE(ActiveXDataObjectsforCE)的实现方式同ADO有所不同。最重要的差别之处在于:ADOCE当前(31版)不支持持续性。特别是对于XML(扩展标记语言)格式。另一个不同之处在于:ADOCE不支持我前面所提到过的记录集编组。因此,它不能为动态创建“连接断开”(没有到数据源的活动连接)状态下的记录集提供支持。
无处不在的WebServices数据
在当前版本的ADOCE(V31)中,我们必须找到另一种处理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)=txtDSNText
lavParameters(2)=txtSQLText
'MakeSOAPCall
ls=SOAPCall(txtURIText,"GetRecordset",lavParameters,chkShowPACkets=1)
'ClearandaddListViewheadings
lvwRecordsetColumnHeadersClear
lvwRecordsetColumnHeadersAdd1,,"ArtNo",700
lvwRecordsetColumnHeadersAdd2,,"Description",1450
lvwRecordsetColumnHeadersAdd3,,"Price",850,lvwColumnRight
'ClearandfillListViewfromXML(withRecordsetEmulation)
lvwRecordsetListItEMSClear
XMLRSOpenls
DoWhileNotXMLRSEOF
Setlitm=lvwRecordsetListItemsAdd(,,XMLRS("ArticleNo"))WSDL (Web Services Description Language,Web 服务描述语言)确定该服务可用后,在(VS)项目上下菜单中选择 添加WEB引用。通过在URL处直接输入WSDL文件路径添加即可。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)