WAP之家:为您提供最全最新的WAP技术,CP.SP.3G等行业资讯。 WAP之家交流论坛全新开放 点击进入>>
WAP资讯 | 3G动态 | SP动态 | 运营商动态 | 内容商动态 | 制造商动态 | 论坛讨论>> 每次自动访问
WAP技术 | WAP源码 | 手机编程 | 手机源码 | 无线技术 | J2ME技术 | 手机软件 添加到收藏夹
IVR技术 | SP资料 | SMS MMS技术 | 商业方案 | IVR下载 | 书籍教程 | 工具软件 语言:繁體中文

WAP之家技术文章手机编程Win Mobile基础知识为Microsoft .NET做好准备

为Microsoft .NET做好准备
作者:BIPLIP  来源:BIPLIP.com  发布时间:2005-12-21 16:38:13
 

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

需要具备

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

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

支持的语言
英语

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

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

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

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

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


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

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

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

Dim lavParameters(2) As Variant
Dim ls As String
  
' Set parameters
lavParameters(1) = txtSymbol.Text
lavParameters(2) = "any company"

' Make SOAP call
ls = SOAPCall(txtURI.Text, "GetStockQuote", lavParameters, 
     chkShowPackets.Value = 1)
  
' Show result
MsgBox "Share price = " & ls

代码说明:

  • 因为eMbedded Visual Basic的功能参数中缺少ParamArray选项,我们必须手动将该参数添加到Variant数组中。
  • SOAPCall函数使用了4个参数:
    1. Web地址,指向Web Services 描述文件(SDL)的URI(Universal Resource Identifier,通用资源标示符)。
    2. 调用的方法名。
    3. 方法使用的参数。
    4. 一个真/假标志,指出在调用期间()是否显示XML负载(已发送和已接受),在本示例代码中我们在窗体中使用了一个复选框(CheckBox)。

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

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

' Set Payload
lsRequest = lsRequest & "<?xml version=""1.0"" encoding=""ISO-8859-1""?>" & vbCrLf
lsRequest = lsRequest & "<SOAP:Envelope xmlns:SOAP=""http://schemas.xmlsoap.org/soap
            /envelope/"" SOAP:encodingStyle=""http://schemas.xmlsoap.org/soap
            /encoding/"">" & vbCrLf
lsRequest = lsRequest & "<SOAP:Body>" & vbCrLf
lsRequest = lsRequest & "<" & Method & ">" & vbCrLf
lsParameterOrder = GetParameterOrder(psServicesDescription, Method)
If lsParameterOrder <> "" Then
  lasParameterOrder = Split(lsParameterOrder, " ")
  For i = 0 To UBound(lasParameterOrder)
    lsRequest = lsRequest & "<" & lasParameterOrder(i) & ">" & CStr(Arguments(i + 1))
                & "</" & lasParameterOrder(i) & ">" & vbCrLf
  Next i
End If
lsRequest = lsRequest & "</" & Method & ">" & vbCrLf
lsRequest = lsRequest & "</SOAP:Body>" & vbCrLf
lsRequest = lsRequest & "</SOAP:Envelope>"

' Get Listener
lsListener = GetListener(psServicesDescription)
  
' Create XML HTTP object
Set loXMLHTTP = CreateObject("Microsoft.

[1] [2]  下一页

[] [返回上一页] [打 印]
文章评论

用户名: 查看更多评论

分 值:100分 85分 70分 55分 40分 25分 10分 0分

内 容:

         (注“”为必填内容。) 验证码: 验证码,看不清楚?请点击刷新验证码