当前位置:首页 > 电源 > 线性电源
[导读]本文介绍了.NET、WebServices(Web服务)和SOAP(简单对象访问协议),并且对一个调用了简单WebServices的源代码示例进行讨论。需要具备Microsoft®eMbeddedVisualToolsPocketPC上的有效Internet连接如果需要,您

本文介绍了.NET、WebServices(Web服务)和SOAP(简单对象访问协议),并且对一个调用了简单WebServices的源代码示例进行讨论。

需要具备

Microsoft®eMbeddedVisualTools

PocketPC上的有效Internet连接

如果需要,您可以下载本文中的示例代码。

须知

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

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

支持的语言

英语

Microsoft.NET、WebServices和SOAP

Microsoft.NET构想的一个核心部分便是实现程序间的普遍集成。这意味着必须使驻留在不同平台上的各种应用程序都可以调用以WebServices形式实现的功能和服务。本质上说,你可以使用WebServices来开发可通过HTTP(HypertextTransferProtocol,超文本传输协议)进行使用的组件方法,并且使用XML(ExtensibleMarkupLanguage,扩展标记语言)对通信数据进行格式化。而完成这一切工作所使用的标准便是SOAP,SOAP当前正在由W3C进行标准化工作。(请通过本文末尾的链接部分了解更多信息)

WebServices将改变我们设计应用程序的方式,因为我们可以将位于Internet各个角落的功能集成到一个单一的定制化程序当中。显然,Web应用程序很适合使用这种程序设计方式。但是客户端程序也可以使用这种方式得以实现,这使得丰富的用户界面同广泛的分布式服务可以完美结合在一起。对于MicrosoftWindows®PoweredPocketPC来说,这也是一种完美的手段,因为它具有强大的用户界面和熟悉的编程平台,而且同台式机相比,它具有相对较低的资源占用量(内存等等)。因为SOAP协议相当小巧,如果您想为设备添加无线访问功能,您可以通过无处不在的功能和服务实现强大的解决方案,从而对现有系统进行极大扩展。“集成点”式的Web服务器离您正在越来越近。它就在那里,在您的手上!

如何调用WebServices

在您的桌面PC上,您首先应该下载SOAPToolkit,然后您可以使用ROPE(RemoteObjectProxyEngine,远程对象代理引擎)从任何语言中调用WebServices。ROPE是一个DLL(动态链接库),它提供了Web服务开发所需的核心功能和基础结构,并且使您可以使用熟悉的编程方式实现Web服务。它允许客户端访问某个WebService,只要该客户端是一个本地COM对象即可。但是,在PocketPC上,现在还没有任何可用的ROPE实现。我说“现在还没有”是因为我相信:未来必将出现可在PocketPC上使用的WebServices(SOAP)和其它一些.NET部件。

同时,您可以使用我提供的简化ROPE实现,它是本文示例代码的一部分,通过它,您现在就可以在您的PocketPC上开始使用WebServices。

WebServices能做什么?

在我们开始讨论代码之前,让我们首先探讨一下WebServices究竟能为我们做些什么。在下面这个窗体中,我从SOAPToolkit中复制了一个示例客户端程序,并将其作为一个MicrosofteMbeddedVisualBasic®应用程序。

图1:PocketPC上的示例ROPE客户端程序。

通过这个客户程序,您可以使用Microsoft在SOAPToolkit中提供的WebService示例从Internet上实时获知股票价格。您还可以从托管这些服务的服务器上得到当前时间,以及由美国海军天文台提供的UTC(CoordinatedUniversalTime)时间。最后,您还可以方便地使用一个向公众开放的翻译服务(就在您自己的程序内部)。非常酷!

代码研究

以下是btnGetStockQuote_Click事件的代码(在按下最顶端的“Get”按钮时执行):

DimlavParameters(2)AsVariant

DimlsAsString

'Setparameters

lavParameters(1)=txtSymbol.Text

lavParameters(2)="anycompany"

'MakeSOAPcall

ls=SOAPCall(txtURI.Text,"GetStockQuote",lavParameters,

chkShowPackets.Value=1)

'Showresult

MsgBox"Shareprice="&ls

代码说明:

因为eMbeddedVisualBasic的功能参数中缺少ParamArray选项,我们必须手动将该参数添加到Variant数组中。

SOAPCall函数使用了4个参数:

Web地址,指向WebServices描述文件(SDL)的URI(UniversalResourceIdentifier,通用资源标示符)。

调用的方法名。

方法使用的参数。

一个真/假标志,指出在调用期间()是否显示XML负载(已发送和已接受),在本示例代码中我们在窗体中使用了一个复选框(CheckBox)。

因为SOAPCall函数是在ROPE.bas模块中实现的,对WebServices的调用过程非常简单。

让我们更深入地看一看ROPE.bas模块。以下是一些进行实际SOAP调用的代码(节选自SOAPCall函数):

'SetPayload

lsRequest=lsRequest&""&vbCrLf

lsRequest=lsRequest&"

/envelope/""SOAP:encodingStyle=""http://schemas.xmlsoap.org/soap

/encoding/"">"&vbCrLf

lsRequest=lsRequest&""&vbCrLf

"&vbCrLf

lsRequest=lsRequest&"<"&Method&">"&vbCrLf

lsParameterOrder=GetParameterOrder(psServicesDescription,Method)

IflsParameterOrder<>""Then

lasParameterOrder=Split(lsParameterOrder,"")

Fori=0ToUBound(lasParameterOrder)

lsRequest=lsRequest&"<"&lasParameterOrder(i)&">"&CStr(Arguments(i+1))

&""&vbCrLf

Nexti

EndIf

lsRequest=lsRequest&""&vbCrLf

lsRequest=lsRequest&"

 

 

 

lsRequest=lsRequest&""

'GetListener

lsListener=GetListener(psServicesDescription)

'CreateXMLHTTPobject

SetloXMLHTTP=CreateObject("Microsoft.XMLHTTP")

'OpenURLtoListener

loXMLHTTP.Open"POST",lsListener,False,"",""

'Setheaderinfo

loXMLHTTP.setRequestHeader"SOAPAction",Method

loXMLHTTP.setRequestHeader"Content-Type","text/xml"

'MakerequesttoSOAPservice/method

loXMLHTTP.SendlsRequest

'IfOK,getresponse

IfLen(loXMLHTTP.ResponseXML.XML)>0Then

lsResponse=loXMLHTTP.ResponseXML.XML

SOAPCall=GetReturnValue(lsResponse,Method)

Else

MsgBoxloXMLHTTP.ResponseText

EndIf

代码说明:

lsRequest变量被实际的请求负载(使用XML格式)所填充。除了方法名和参数值以外,内容主要是硬编码的XML文本。GetParameterOrder函数抽取出了参数和它们各自的顺序,以便以正确的顺序接收各个参数。

GetListener函数可以取出Web地址,也就是URL(UniversalResourceLocator,通用资源定位符),来“侦听”WebService。侦听程序是一个Web页面,请求将被发送到这个页面上,该页面使用服务描述语言定义。它通常上是一个ASP(ActiveServerPages)页面,但是使用一个更有效的ISAPI(InternetServerApplicationProgrammingInterface,Internet服务器应用程序编程接口)。

我目前正在使用XMLHTTP进行实际调用,您可以在所有PocketPC上找到该组件。

GetReturnValue函数负责从响应负载(XML格式)中取出返回值。如果发生错误,返回值为错误代码。

虽然没有在上面的代码中显示,但大多数子函数都使用XMLDOM组件(可在所有PocketPC上找到该组件)分析响应XML字符串。而且即便是ROPE.bas模块没有实现所有SOAPToolki所能够实现的所有ROPE功能,但它提供了最重要的大部分功能--足以使您调用WebServices。

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

运行服务

好了,我已经完成了使WebServices开始工作所需的一些基础工作。现在,要由您来完成最有意思的部分:创建一个使用WebServices的出色程序。目前,Internet上还没有太多的WebServices供我们使用,所以您必须自己实现一些服务。但是,我知道Microsoft提供了一个叫做TerraService的WebServices,它可以将动态地图发送到您的应用程序之中。此外,您开可以在网上找到一个利用VisualStudio.NETBeta1创建的示例程序。

如果您想对新出现的WebServices保持跟踪,请访问MicrosoftUDDI(UniversalDescription,DiscoveryandIntegration)站点。UDDI的目标是创建一个全球化的WebServices存储库,您可以使用它查找所需的功能和服务--甚至是来自某个应用程序的实时服务,包括Microsoft、IBM、Sun、Oracle在内的主要厂商和其它100多家厂商都支持UDDI。

如果您决定在Internet上发布某个Web服务,请及时通知我--我想先试试它们!

未来会怎样

我相信在不远的将来,所有的.NET特性都将在PocketPC上得以实现。随后,对WebServices的支持将集成到操作系统和开发工具之中。调用WebServices将像调用本地组件那样容易,大多数应用程序将通过集成多个服务进行构建。第一次WebServices浪潮预计将出现在公司内部,企业将来自多个系统的服务集成到一个应用程序之中,随后的发展趋势则是通过Internet将来自多个服务提供商的多个服务完全集成在一起。

相关链接

如果您想了解同.NET有关的更多信息,请访问Microsoft.NET页面。

如果您想了解同SOAP有关的更多信息,请访问MSDNSOAP开发资源页面。

如果您想了解同ROPE有关的更多信息,请访问MSDNMagazine文章“WebService开发:立即上手使用SOAPToolkitforVisualStudio”。

如果您想同PC上的代码示例进行对比,请下载SOAPToolkit(SOAPToolkitforMicrosoftVisualStudio®V6.0)。

小结

对于利用分布式Web服务的强大功能来说,具有纤细外形的PocketPC可以说是上佳之选。您现在不仅可以浏览Web内容,而且可以充分利用Web所具有的强大能量(功能),您甚至可以使用无线方式做到这一切。

我希望,您能像我一样为这一切感到万分激动,因为它将实质性地改变我们的系统集成方式。当各种出色的WebServices如雨后春笋般涌现出来之时,您就可以在任何地方轻而易举地利用这些服务。

希望能有更多的开发人员就此问题在PocketPC.com上展开讨论,因为WebServices是.NET战略重中之重。

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

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭