在Pocket PC中使用Web Service连接数据库
前言
微软的移动开发者大会在六月的北京举行了,国内的移动应用软件虽然是刚刚起步,但是这个前景宽广的领域已经受到越来越多软件厂商的关注了。移动设备上的商业应用尽管刚刚起步,但已经显示出巨大的发展潜力。
在微软移动开发挑战赛中,我的作品《饕餮元年无线餐饮管理系统》获得了商业应用的三等奖。为了实现Pocket PC与后台数据库服务器的连接,我的作品中使用了.Net CompactFramework和Web Service技术,我将核心部分的实现原理拿出来与大家分享。在本文中没有涉及《饕餮元年》的代码,我用另外一个程序“SQL查询分析器”作为演示的范例。
在嵌入式数据库领域,世界各大数据库厂商都提供了自己的移动解决方案,比如微软的SQL Server CE、Sybase的iAnywhere、IBM的DB2 Everyplace等。虽然各家厂商都提供了数据同步的解决方案,而且实现原理大同小异,但是,每种数据同步方案都针对自己的数据库,不能兼容其他的数据库产品。
那么有没有什么办法,可以通过一种机制来访问多种数据库呢?微软的Mobile 2003已经完全支持.net Compact Framework开发,而.net对Web Service提供了很好的支持,开发者可以很容易的开发Web Service的服务程序和客户端应用。
本文讨论的是在Windows Mobile2003平台上通过Web Service来访问多种数据库的解决方案。这肯定不会是移动设备访问多种远程数据库的最优解,但我希望这是利用现有技术实现的比较优秀的解决方案。
系统需求:Visual Studio .NET 2003
Pocket PC 2003 模拟器
IIS 5.0
第一个Web Service
目前Web Service受到了广泛的关注,主流的开发工具都为Web Service开发提供了很好的支持。我们在这里使用Visual Studio . NET 2003来做一个简单的Web Service实例,让不了解Web Service开发的程序员更好的进入后续话题的讨论。
我们首先来创建一个ASP.NET Web Service工程:打开File菜单,选择New,然后是Project。在New Project对话框中,Project Types选择“Visual C# Projects”,Templates中选择“ASP.NET Web Service”。Location中选择你的Web Service的位置和名称,由于我的机器上配置了IIS服务,所以我将Web Service直接部署在本机上。请见图一。
ASP.NET Web Service工程和ASP.NET十分相似,只是页面文件的扩展名为asmx,而不是aspx。接下来,我们要为Web Service 创建一个WebMethod。打开Service1.asmx.cs文件,在class Service1中添加两个WebMethod:YourName和welcom,代码如下(粗体字为添加的代码):
namespace WebService1
{
public class Service1 : System.Web.Services.WebService
{
……
[WebMethod]
public string YourName()
{
return "My Name is wolf!我就是老狼!";
}
[WebMethod]
public string welcom(string yourname)
{
string str = yourname+",欢迎使用wolf的Web Service";
return str;
}
}
}
这里需要提醒大家注意的是,每个WebMethod都必须是public的,而且需要在函数前
加上[WebMethod]的声明。YourName函数返回一个包含英文和中文的string对象,主要是想测试一下Web Service的字符串能否在支持Unicode的WindowsCE平台上正常现实。Welcom函数增加了一个参数,目的也是为了测试Web Service和WindowsCE平台间是否存在字符串不能正常显示的问题。
然后我们选择Debug菜单中的Start命令(或者按F5)运行这个Web Service,出现如下界面:(见图二)
可以看到,我们刚才编写的两个函数的名称被显示了出来。大家可以点击函数名称,来查看WebMethod的SOAP和HTTP POST等信息,还可以直接点击Invoke按钮,查看WebMethod返回的结果是否正确。
如果您的Web Service工作一切正常,接下来,我们创建一个Smart Device应用程序,在Pocket PC 2003环境下调用我们的Web Service。如果您对如何在Visual Studio .NET 2003下如何创建Smart Device应用程序还不是很了解,希望您参考下面的说明。
打开一个新的VS.NET的IDE环境,打开File菜单,选择New,然后是Project。在New Project对话框中,Project Types选择“Visual C# Projects”,Templates中选择“Smart Device Application”,然后点击OK。
在Smart Device Application Wizard对话框中,有两个列表框。上边一个列表框选择程序的目标平台,根据你开发使用机器上所安装的SDK的不同可以显示出不同的选项。其中Pocket PC中包括Pocket PC 2002和Pocket PC 2003;Windows CE中包括其他支持.NET Compact Framework的WindowsCE平台。如果您安装了SmartPhone的SDK,这里也会显示出SmartPhone的选项。
下面的对话框选择的是所创建的应用程序类型,包括Windows应用程序、类库、Non-graphical应用程序和空工程。这里的选项根据您选择平台的不同也会略有差异。还有一点需要说明的是,如果您安装了Mobile Internet Toolkit,您也可以通过这个向导来创建目标平台为Mobile设备的ASP.NET Web程序。
我们在这里选择“Pocket PC”和“Windows Application”,点击OK。我们就可以开始移动开发之旅了。
我们先来看一下IDE环境的全景:其实和WinForm程序的开发环境差不多吧。但请大家注意上图中的下拉菜单,做过WindowsCE开发的朋友们一定很熟悉吧。对了,这就是选择应用程序输出设备的菜单。我们在这里选择“CHS Pocket PC 2003 – SDK Emulator”,我们可以选择下拉菜单旁边的Connect To Device按钮来启动模拟器,也可以等到程序运行时再启动模拟器。
请注意:Visual Studio .NET 2003会默认安装Pocket PC 2002的SDK,您需要另外安装Pocket PC 2003 SDK和中文映像才能够看到这一项。不过您在Pocket PC 2002的模拟器下调试下面的应用程序也是没有问题的。
下面,我们来添加Web References,选择Project菜单下的“Add Web References”,或者在Solution Explorer中右击Web R