`

Windows Mobile中的WebService应用

 
阅读更多

Web Service对于开发者来说已经不再是一个陌生概念了。Web Service允许应用程序通过Internet进行通讯和数据交换。随着微软.NET战略的推行,这种可编程的、通过SOAP协议、基于XML的网络协议已经赢得了开发者的心。

  现在,随着无线数据网络的发展,移动设备如何访问网络资源的问题显得格外突出。我们目前已经拥有了GPRS和CDMA的广域数据通讯网络,很多地方也覆盖了WI-FI的无线数据局域网。如何让我们的应用程序更好的利用网络资源?

  Windows Mobile移动设备为我们提供了.NET Compact Framework,为我们开发移动应用程序带来的了极大的方便。.NET Compact Framework也提供了方便的Web Service访问方式,帮助开发者来编写基于Web Service的移动应用程序。

  目前来看,Windows Mobile应用程序访问Web Service的应用主要出现在两个方面:首先是个人应用程序需要获取公共数据服务,比如获取天气预报、地理信息等;其次是,基于Windows Mobile的企业级应用将核心服务发布成Web Service形式,由移动应用程序进行调用。

  我们这次主要讨论调用公众数据服务Web Service的情况,以Google和MapPoint Web Service为样本,讲述如何在Windows Mobile应用程序中调用搜索引擎和地图服务。

  访问Google Web Service

  Google是目前网络上最流行的搜索引擎之一,关键字搜索完全改变了网络信息的组织形式。Google很早就提供了公共Web Service服务,允许应用程序访问Google提供的搜索、拼写检查和页面缓存的功能。Google Web Service的每个帐号一天最多查询一千次。

  在使用Google之前,我们必须去www.google.com/apis,申请一个Google Account。注册成功后,会收到一个Google的关键字,每次调用的时候,都要提供这个关键字。

  在申请成功后,我们可以动手开发自己的应用程序了。我们在Visual Studio 2005 Beta 2中创建一个Device Application。然后我们要为Google Web Service添加一个Web引用。在Project菜单中选择Add Web Reference,在URL里输入 http://api.google.com/GoogleSearch.wsdl,选择Add Reference按钮就可以了。这样,我们就把Google Web Service添加到我们的应用程序中来了。

  我们先来认识一下Google Web Service中的对象。这些对象设计得和Google的主页一样简单。

 

对象 说明
DirectoryCategory ODP目录的内容和种类
GoogleSearchResult Goolge查询结果
GoogleSearchService Google查询服务对象
ResultElement 查询结果集元素

  我们下面就来用这些对象来编写一个简单的Google查询的程序。我们首先要介绍一个重要的API:GoogleSearchService下的doGoogleSearch。

public GoogleSearchResult doGoogleSearch(
string key, // Google Key
string q, // 查询内容
int start, // 从第几条结果开始返回
int maxResults, // 最多返回多少条(最多10条)
bool filter, // 是否自动过滤相似或来源相同的结果
string restrict, // 限制查询结果来自Google Web 索引的一个子集
bool safeSearch, // 是否过滤成年人内容
string lr, // 语言限制(”lang_zh-CN”为中文)
string ie, // 输入编码
string oe) // 输出编码

  在某些情况下,我们需要设置代理服务器来访问一些网络资源,所以,我们要引入System.Net的命名空间,然后创建一个Web Proxy赋给GlobalProxySelection,才能保证我们调用Web Service的正常。

WebProxy proxy = new WebProxy("itgproxy",80);
proxy.BypassProxyOnLocal = true;
GlobalProxySelection.Select = proxy;

  在上面的代码里我们首先创建一个WebProxy,地址为” itgproxy”,端口为80。然后选择本地地址不使用代理服务器,最后设置到GlobalProxySelection中。

  下面我们把完整的代码写出来:

try
{
WebProxy proxy = new WebProxy("itgproxy",80);
proxy.BypassProxyOnLocal = true;
GlobalProxySelection.Select = proxy;

GoogleSearchService service = new GoogleSearchService();
GoogleSearchResult result = service.doGoogleSearch(
key, // 查询Key
textBox1.Text, // 内容
0, // 从第几条结果开始返回
10, // 最多返回的条数(最大10条)
false, // 是否自动过滤相似或来源相同的结果
"", // 限制查询结果来自Google Web索引的一个子集
false, // 是否过滤成年人内容
"", //"lang_zh-CN", // 语言限制
"", // 输入编码
""); // 输出编码

for(int i = 0; i <= (result.endIndex - result.startIndex); i++)
{
ResultElement element = result.resultElements[i];
listBox1.Items.Add(element.title);
listBox1.Items.Add(element.snippet);
listBox1.Items.Add(element.URL);
}

MessageBox.Show(result.estimatedTotalResultsCount.ToString());
}
catch (System.Web.Services.Protocols.SoapException ex)
{
MessageBox.Show(ex.Message);
}

  在设置好代理服务器后,我们创建一个GoogleSearchService的对象,然后调用该对象的doGoogleSearch方法。我们将得到一个GoogleSearchResult的结果集,通过endIndex和startIndex属性,我们可以获得查询结果的数量。我们从结果集对象的resultElements中获得ResultElement对象,然后把标题、简介和URL显示到listBox中去。最后我们可以用结果集对象的estimatedTotalResultsCount属性,来获取一共找到了多少个结果。我们上边曾经说过,每次查询最多只能返回10个结果,但是estimatedTotalResultsCount返回的是所有符访问MapPoint Web Service

  MapPoint是微软提供的一个地图信息的Web Service,提供全球各地的地理信息和商业网点信息(主要是北美和欧洲地区)。MSN Search推出的地理搜索服务也是基于MapPoint Web Service服务的。目前MapPoint还不包括中国的地理信息。

  Windows Mobile设备的存储空间比较小,所以很难保存大量的地图数据。但是随着无线网络的普及,Windows Mobile设备就可以方便地查询保存在服务器上的地图数据和黄页信息。MapPoint Web Service还可以结合Windows Mobile设备上的GPS定位系统或者LBS服务,查询附近的旅游景点和商业场所,这对于移动应用也具有十分现实的意义。

  MapPoint是一个收费的Web Service,不过,我们可以申请一个60天的测试帐号。MSDN的订户还可以申请一个为期一年的帐号,用于应用程序的开发。在申请到帐号后,我们不但可以查询公共的地理信息,还可以上传自己的地理信息,用于支持自定义的地理信息查询。

  我们创建一个Windows Mobile Device Application,然后添加一个Web Reference,URL为“http://staging.mappoint.net/standard-30/mappoint.wsdl”。

  在编写程序之前,我们先来看一下MapPoint中需要用到的类和方法。

 

类方法 说明
FindServiceSoap 包括查询服务(find service)的方法和属性
RenderServiceSoap 包括查询结果表示服务(render service)的方法和属性
FindSpecification 用于指定FindServiceSoap.Find的查询信息
FindResults FindServiceSoap查询操作的单个结果
ViewByScale 包含地图定义地图比例和基准点
MapOptions 包含RenderServiceSoap.GetMap方法的地图显示选项
Pushpin 包括图钉的图标、标签、定位、用户指定数字
MapSpecification 包含地图显示的详细规范
MapImage RenderServiceSoap.GetMap返回的地图

  我们首先来创建MapPoint查询过程中最重要的两个对象:

FindServiceSoap fws = new FindServiceSoap();
RenderServiceSoap ws = new RenderServiceSoap();
fws.Credentials = new NetworkCredential(myUserName, myPassword);
ws.Credentials = new NetworkCredential(myUserName, myPassword);

  FindServiceSoap是提供地图查询服务的主要对象,RenderServiceSoap是表现查询结果地图的主要对象。在使用之前,我们要先创建一个NetworkCredential对象,将MapPoint的用户名和密码传给FindServiceSoap和RenderServiceSoap的Credentials属性。

  然后我们创建一个FindSpecification对象,指定地图数据库、要查询的地点,然后将其作为FindServiceSoap的Find方法的参数执行查询,并返回FindResults对象中。

FindSpecification myFindSpec = new FindSpecification();
myFindSpec.DataSourceName = "MapPoint.NA";
myFindSpec.InputPlace = this.textBox1.Text;

FindResults results = fws.Find(myFindSpec);
if (0 == results.NumberFound)
{
MessageBox.Show("你找的是什么鬼地方?");
return;
}

  我们选择的地图数据源是北美地区的数据集“MapPoint.NA”,而InputPlace是要查询的地点,从界面上的文本框中获得。然后调用FindSpecification的Find方法,返回FindResults对象。如果结果集对象的NumberFound属性为0,则说明没找到合适的结果。

  然后我们创建一个ViewByScale对象,为该对象的CenterPoint属性创建LatLong对象。CenterPoint属性的经纬度分别results.Results[0].FoundLocation.LatLong中的经纬度。然后在ViewByScale对象的MapScale属性中设置地图的比例尺。创建MapOptions对象,在MapOptions.Format设置地图的宽度和长度。创建一个图钉对象Pushpin,将图钉对象的经纬度设置为ViewByScale对象的经纬度。

  在创建完这些对象后,我们创建一个MapSpecification对象用于指定要显示地图的详细情况。我们要指定MapSpecification对象的地图数据集,并将前边创建的三个对象分别赋给Options、Pushpins、Views属性中。

MapSpecification myMapSpec = new MapSpecification();
myMapSpec.DataSourceName = "MapPoint.NA";
myMapSpec.Options = options;
myMapSpec.Pushpins = pushpins;
myMapSpec.Views = views;

  在设置完成MapSpecification对象后,我们将其作为参数,调用RenderServiceSoap对象的GetMap方法,获取MapImage对象。然后将MapImage对象中的数据作为MemoryStream内存流,用于创建一个Bitmap对象,最后显示到PictureBox中。

MapImage[] images = ws.GetMap(myMapSpec);
this.pictureBox1.Image = new System.Drawing.Bitmap(new System.IO.MemoryStream(images[0].MimeData.Bits));

  完整代码如下:

WebProxy proxyObject = new WebProxy(proxy, 80);

// Disable proxy use when the host is local.
proxyObject.BypassProxyOnLocal = true;

// All requests this proxy information.
GlobalProxySelection.Select = proxyObject;

FindServiceSoap fws = new FindServiceSoap();
RenderServiceSoap ws = new RenderServiceSoap();
fws.Credentials = new NetworkCredential(myUserName, myPassword);
ws.Credentials = new NetworkCredential(myUserName, myPassword);

FindSpecification myFindSpec = new FindSpecification();
myFindSpec.DataSourceName = "MapPoint.NA";
myFindSpec.InputPlace = this.textBox1.Text;

FindResults results = fws.Find(myFindSpec);
if (0 == results.NumberFound)
{
MessageBox.Show("你找的是什么鬼地方?");
return;
}

ViewByScale[] views = new ViewByScale[1];
views[0] = new ViewByScale();
views[0].CenterPoint = new LatLong();
views[0].CenterPoint.Latitude = results.Results[0].FoundLocation.LatLong.Latitude;
views[0].CenterPoint.Longitude = results.Results[0].FoundLocation.LatLong.Longitude;
views[0].MapScale = 150000;

MapOptions options = new MapOptions();
options.Format = new ImageFormat();
options.Format.Height = this.pictureBox1.Height;
options.Format.Width = this.pictureBox1.Width;

Pushpin[] pushpins = new Pushpin[1];
pushpins[0] = new Pushpin();
pushpins[0].IconDataSource = "MapPoint.Icons";
pushpins[0].IconName = "0";
pushpins[0].Label = results.Results[0].FoundLocation.Entity.Name;
pushpins[0].LatLong = views[0].CenterPoint;
pushpins[0].ReturnsHotArea = true;

MapSpecification myMapSpec = new MapSpecification();
myMapSpec.DataSourceName = "MapPoint.NA";
myMapSpec.Options = options;
myMapSpec.Pushpins = pushpins;
myMapSpec.Views = views;

MapImage[] images = ws.GetMap(myMapSpec);
this.pictureBox1.Image = new System.Drawing.Bitmap(new System.IO.MemoryStream(images[0].MimeData.Bits));

  我们上面演示的仅仅是最简单的地图查询功能,我们还可以通过FindAddress, FindByID, FindByProperty, FindNearby 或者 FindNearRoute等方法来查询地址、查询附近的地点等。我们还可以通过MapPoint Web Service来实现智能路标的功能。

  写在最后

  上面我们一起了解了如何在Windows Mobile应用程序中加入Google和MapPoint的Web Service。我们还可以通过Web Service来发送短信,获取天气预报。越来越多的服务提供商也开始把自己的服务发布成Web Service,使自己的服务不但可以提供给终端用户,还可以提供给应用程序开发者,从而扩大自己的用户群。

  现在Web Service和Windows Mobile应用程序都处在发展期。随着无线网络的成熟,加上其他的智能手机操作系统也开始支持Web Service,我们会看到越来越多应用于移动设备上的Web Service案例。

合条件的记录。

分享到:
评论

相关推荐

    windows mobile 6.0 基于WebService方式与PC Server通讯的demo

    在Windows Mobile 6.0中,我们可以使用.NET Compact Framework(.NET CF)来开发支持WebService的应用程序。.NET CF是.NET Framework的一个轻量级版本,专门为资源有限的移动设备设计。开发者可以通过Visual Studio...

    Windows Mobile 5.0远程数据访问(WebService)

    在移动设备领域,Windows Mobile 5.0是一个重要的操作系统版本,它为开发者提供了丰富的功能,包括对远程数据的访问能力。本篇文章将深入探讨如何利用Windows Mobile 5.0平台上的Web Service技术来实现与远程数据库...

    WindowsMobile开发实例

    在Windows Mobile应用中,我们通常会使用System.Xml命名空间下的类,如XmlDocument、XmlNode等,来解析和操作XML数据。 为了在Windows Mobile设备上连接并调用WebService,我们需要了解如何使用HttpClient类。在...

    Windows Mobile Application add google

    ### Windows Mobile 应用添加 ...通过以上内容的学习,相信开发者已经掌握了如何在 Windows Mobile 应用中集成 Google 和 MapPoint WebService 的方法。这些技术不仅可以提高应用的功能性和实用性,还能提升用户体验。

    Mobile webservice C++

    MFC是微软为Windows平台开发的C++类库,它为开发者提供了构建桌面应用的便利。然而,MFC并不直接支持Web服务,这就需要我们引入第三方库,比如gsoap。gsoap是一个开源工具,它允许开发者在C或C++中生成和使用SOAP...

    webservice

    在IT领域,特别是移动开发与网络服务交互方面,“Pocket PC调用WebService”是一个重要的知识点,主要涉及了如何在基于Windows Mobile的设备上实现与WebService的通信。以下将深入解析这一主题,包括WebService的...

    移动设备上的webservice调用开发 源代码

    3. **客户端调用**:在移动应用中,我们需要创建一个客户端代理来与WebService通信。对于Android,可以使用ksoap2库处理SOAP请求,或者使用HttpURLConnection或OkHttp库处理REST请求。对于iOS,可以使用NSURLSession...

    VS2019 c# 中国移动云mas平台 webservice实现

    通过MAS平台,开发者可以便捷地集成到自己的应用中,实现与移动设备的交互。 4. **WebService的原理与应用** WebService是一种基于HTTP协议的网络服务,通过XML来交换数据。它可以被任何支持HTTP的客户端(如VS...

    基于Windows Mobile 的数据同步技术

    ### 基于Windows Mobile 的数据同步技术 #### 一、为什么需要数据同步? 随着移动设备的普及,用户越来越依赖于这些便携式设备来...在实际应用中,开发者应根据项目特点和技术背景,合理选择最适合的数据同步方案。

    Window Mobile SmartPhone智能手机软件开发入门篇

    标题中的“Window Mobile SmartPhone智能手机软件开发入门篇”是指针对搭载Windows Mobile操作系统的智能手机进行应用程序开发的初级教程。描述中提到的开发环境主要是利用Visual Studio .NET 2003来构建针对...

    利用现成的资源(一个可发送短信的WebService)来开发短信发送程序.txt

    通过分析和应用上述知识点,开发者可以有效地利用已有的WebService资源,在Windows CE平台上构建短信发送功能。这种方法不仅简化了开发过程,还提高了程序的跨平台性和互操作性,是现代软件工程中一种实用的实践策略...

    Microsoft .NET Compact Framework 开发常见问题解答

    基于 Windows Mobile 的 Smartphone 是 .NET Compact Framework 应用程序中的一个重要组成部分。.NET Compact Framework 提供了多种基于 Windows Mobile 的 Smartphone控件,例如 Smartphone2003、Windows Mobile ...

    移动代理服务器WebService接口协议.pdf

    移动代理服务器(MAS,Mobile Agent Service)的WebService接口协议,旨在提供一种高效、安全的通信方式,以实现客户端与MAS之间的数据交换,主要服务于短信收发及状态报告等功能。此协议基于TCP短连接模式,MAS作为...

    sms.rar_pocketbuilder_visual c_wince webservice

    - 如果需要执行更底层的操作,比如处理网络连接或优化性能,可以使用Visual C++编写动态链接库(DLL),然后在PocketBuilder应用中调用这些DLL。 - Visual C++的`wininet`库可以用于创建HTTP连接,与Web服务进行...

    Web Service在移动开发中的应用

    随着智能手机的日益普及,3G高速无线网络时代的来临,我们以前需要计算机才能...本例介绍了在Windows Mobile智能手机上,通过WebService技术访问单位内部办公网的信息,达到随时能够了解校内办公网信息发布情况的方法。

    泛微e-mobile常见问题及解决

    最后,如果manager后台弹出框,如添加用户或模块设置中的设置按钮无法打开,可能的原因包括未应用ecology/mobile目录下的补丁包。此外,如果ecology和emobile部署在同一台服务器,ecology地址不应写作localhost和***...

    手机GPRS例子 手机翻译软件及天气查询软件

    在手机GPRS应用中,Web服务可能被用来获取远程数据,例如天气信息或者翻译服务的后端支持。 “mobile”指的是移动设备,这里的上下文主要是指智能手机,这些设备通常配备了GPRS或其他移动数据连接技术,可以运行...

    mobile phone text message invoke api

    标题“mobile phone text message invoke api”涉及的是手机短信服务与应用程序接口(API)的结合,使得开发者可以利用这些接口在各种编程语言中实现短信的发送和接收功能。这通常包括通过Windows API(应用程序接口)...

    webservice接口开发.doc

    4. **不同类型的客户端**:客户端可以是Web浏览器、Windows应用程序或WAP(无线应用协议)客户端。无论哪种类型,客户端都需要能够调用Web服务接口并处理返回的数据。在本文的例子中,所有客户端都接收用户输入的...

    MC3190 终端程序开发

    这项工作通常涉及到C#编程语言,因为C#是.NET框架的一部分,能够很好地支持Windows CE或Windows Mobile操作系统,这是MC3190这类手持设备常用的操作系统。 首先,开发者需要在服务器端建立一个WEBSERVICE。这是一个...

Global site tag (gtag.js) - Google Analytics