跨平台文件传输 跨平台文件传输 REST风格服务在跨平台数据传输中的研究与应用

  摘要:利用手持设备进行移动办公已经成为一种趋势,由于手持设备难以进行大型的数据库存储和软件应用,且手持设备与服务端的平台与技术也不尽相同,因此相互之间如何进行高效的数据交互就成为亟待解决的问题,针对这一问题,该文在研究WCF与REST风格的基础上,对Android平台客户端与.NET服务端之间的数据交互进行了设计与实现。

  关键词: REST风格服务; WCF ; Android
  中图分类号:TP309 文献标识码:A 文章编号:1009-3044(2014)16-3803-04
  Abstract:Using handheld devices for mobile officing has become a trend. But it is difficult for handheld devices to carry out Large-scale data storage and software application. And these platforms and technologies are not the same Between the handheld device and server. However it had been a problem of desiderate to solve that how to make an efficient data exchange m between them. For this case, this paper research WCF and REST style services, then the data exchange between Android Client and .NET Server is designed and realized.
  Key words: REST style services; WCF; Android
  由于Android系统的开放性和免费服务,使得其成为现今手持式移动设备(如平板电脑、智能手机等)的主流操作系统,而手持式移动设备也逐渐成为了企业信息化过程中不可或缺的一部分。但手持式移动设备由于硬件的限制难以进行大型的数据库存储和软件应用,在企业信息化过程中往往处于客户端的角色,且与服务端的平台与技术也不尽相同,因此其与服务端之间的高效数据交互就成为急需解决的问题。
  手持式移动设备大多数基于Android系统,因此客户端的实现一般采用JAVA平台;而服务端很多采用Microsoft .NET平台。对于异构系统间的数据交互,制定一定的数据交换标准是真正解决异构系统数据不一致问题的根本途径,虽然传统的Socket、TCP通信技术实现起来简单,但是编程复杂度高、消息解析麻烦[1]。Web Service的出现解决了异构系统间无缝衔接的技术,它主要有两种风格,一种是XML,另一种是REST。由于REST最突出的特性在于回归了Web的资源性和简单性,弃用了基于SOAP和WSDL等复杂的接口,而采用了更易用、面向资源的模型来公开服务,因此可以开发出具有更好交互功能和可伸缩性的Web服务。
  1 WCF与RESTful Web Services
  1.1 WCF
  WCF(Windows Communication Foundation,Windows通信基础)是微软公司为了支持SOA(Service Oriented Architecture,面向服务的架构)而推出的基于Windows平台开发部署软件的SDK,它整合了.NET平台下所有与分布式系统相关的技术(如XML Web Service、WSE、.NET Remoting、Enterprise Service以及MSMQ等),为分布式系统的开发提供一个统一的编程模型。
  WCF是一个基于消息的通信框架,采用基于终结点(Endpoint)的通信手段。终结点由地址(Address)、绑定(Binding)和契约(Contract)三要素组成[2]:
  地址(Address):包含两个重要的元素,即服务位置和传输协议或用于服务通信的传输样式,主要用于解决服务寻址的问题。地址通信常用格式为[基地址]/[可选的URL],而基地址通常采用的格式为[传输协议]://[机器名或域名][:可选端口]。
  绑定(Binding):绑定实现了通信的所有细节,包括网络传输、消息编码,以及其他为实现某种功能(比如安全、可靠传输、事务等)对消息进行的相应处理。WCF中具有一系列的系统定义绑定,比如WebHttpBinding、BasicHttpBinding、WsHttpBinding、NetTcpBinding等。
  契约(Contract):契约与平台无关,是对服务操作的抽象,也是对消息交换模式以及消息结构的定义。WCF定义的契约有服务契约(Service Contract)、数据契约(Data Contract)、错误契约(Fault Contract)和消息契约(Message Contract)四种。
  1.2 RESTful Web Services
  在.NET Framework 3.0中,WCF是不具备RESTful功能的,RESTful作为WCF的一个扩展功能是在.NET Framework 3.5以后版本中才包含进来。REST的全称是Representation State Transfer,最早是Roy Thomas Fielding在他的博士论文中的第五章提出。REST不是一种软件架构,而是对Web体系结构设计原则的抽象和描述[3]。它包含一组架构约束条件和原则,满足这些约束条件和原则的应用程序或设计就是 RESTful风格的。而符合RESTful风格的Web Services,就是我们所说的RESTful Web Services。在REST中,很重要的一个概念是Resource,Resource可以是文档、图片、一个短暂的服务,甚至可以是真实的人等[4]。每个Resource都由一个URL来标识,目前有三种URL格式用来标识Resource,用得较多的一种是以“/”分割参数的方式[5],例如在Google中获取某个用户所创建的日历(Calendar)的URL格式为:   http://www.google.com/calendar/feeds/userID/private-magicCookie/full,其中userID为Google账号。
  2 客户端与.NET服务端之间数据交互的实现
  笔者以一个经销商平台为例,客户端与服务端的数据交互流程如图1所示。
  根据数据交互流程图,服务端必须提供四个接口,分别为验证用户名和密码接口、下载服务端数据表接口、下载服务端图片接口和订单上传接口。要实现数据交互,首先必须确定数据传输格式,然后进行服务端设计以给客户端提供Web Services,最后实现客户端对服务端Web Services的调用。
  2.1 数据传输格式的选择
  目前数据传输格式大多采用XML、FSV和JSON,目前已有对这三种数据格式传输开销的研究[6]。研究证明:以JSON格式传输数据所消耗的时间明显短于以XML格式传输数据所消耗的时间,而略短于FSV传输数据消耗的时间; JSON反序列化时间也明显小于XML反序列化时间;同时JSON 便于阅读和编码,又是JavaScript规范的子集,便于机器解析,减少了解析XML带来的性能和兼容性问题。因此选择JSON格式作为移动设备客户端与服务端之间的数据传输格式是最适合的。
  JSON支持两种结构[7]:
  第一种结构是“名称/值”对集合,也称对象结构,以“{”开始,“}”结束,每个“名称/值”对中间用“:”分隔”,多对“名称/值”之间使用“,”将其分隔。其结构如图2所示。
  下面是一个简单示例:
  var customer={" customerID":"C001","contact":"tom","phone":"13900000000"}
  这个对象包含了3个元素customerID;contact;phone,它们的值分别是C001;tom;13900000000。
  第二种结构是有序值列表,也称数组结构,以“[”开始,“]”结束, “值”之间使用“,”将其分隔。结构如图3所示。
  下面是一个简单示例:
  var customerIDList={"C001","C002"," C003"}
  这个示例表明在数组customerIDList中包含3个元素' C001',' C002' ,' C003'。
  要注意的是:名称一般为字符串形式,而值可以是双引号括起来的字符串、数字、true、false、null,也可以是一个对象甚至是一个数组结构,并且这些值之间可以互相嵌套。
  2.2 服务端设计
  WCF的核心有两个,一个是终结点的配置,另一个是服务接口的实现,下面分别讲述其实现。
  3.2.1 WCF Endpoint配置
  在web.config文件services节中进行如下设置,具体代码如下:
  
  
  
  
  
  
  
  
  
  
  
  
  
  以上代码是以管理方式配置终结点,其中“Test_WcfService.TestService”用于指定命名空间,“http://localhost:8090/TestWcf/TestService.svc”用于指明基地址,而绑定方式“webHttpBinding”是指WCF所提供支持Web编程模型的绑定。
  2.2.2 数据接口实现
  下面以验证用户名和密码接口为例,接口实现思路如图4所示,其它接口可以参考该接口进行实现。
  数据接口实现后,接下公开URL以便客户端调用,如:http://localhost:8090/TestWcf/TestService.svc/login
  2.3 客户端设计
  由于Android程序对一些敏感信息的访问权限进行了控制,而对REST风格服务的调用又需要通过网络进行,因此在客户端程序的全局配置文件中开放应用的网络连接权限。
   uses-permission>
  本客户端采用了HttpURLConnection接口来实现对服务的调用,在建立HTTP连接的基础上对HTTP报头属性进行相应的设置,通过HTTP报头传递相应的状态信息。对REST风格服务进行HTTP调用时,首先要通过openConnection方法获得一个连接对象,然后对HTTP报头的属性进行设置,并将请求正文输入到输出流中,最后将请求发送,根据服务端响应的内容进行相应的操作。   下面以验证客户端用户名及密码的合法性为例,采用POST请求方式对REST风格服务进行调用.其它请求方式也可以此作为参照具体方法如下:
  URL url=new URL(address);//address为验证用户名及密码接口URL
  HttpURLConnection connection=(HttpURLConnection)url.openConnection();
  connection.setRequestMethed("POST");//设置请求方式
  connection.setDoInput(true);//允许输入
  connection.setDoOutput(true);//允许输出
  connection.setRequestProperty("Accept"," application/json ");//设置接受文档格式
  connection.setRequestProperty("Content-Type", "application/json");//设置发送文档格式
  connection.connect();
  //POST请求
  DataOutputStream out = new DataOutputStream(connection.getOutputStream());
  JSONObject obj = new JSONObject();
  obj.element("Account ", "tom");
  obj.element("Password ", "202cb962ac59075b964b07152d234b70");//密码用MD5加密
  out.writeBytes(obj.toString());
  out.flush();
  out.close();
  //读取响应
  if(connection.getResponseCode()==connection.HTTP-OK){
  //请求响应成功的相应操作
  }else{//请求响应的其他相应操作
  }// 断开连接
  connection.disconnect();
  3 结束语
  本文在研究WCF与REST风格的基础上,并以一个经销商平台的实现为例分别对Android平台客户端与.NET服务端数据接口进行了设计与实现。实践证明,利用REST风格服务在跨平台数据交互不仅编程简单、灵活性好、效率高,更重要是具有很好的安全性。
  参考文献:
  [1] 朱夏,王茜.异构系统间数据交换模型的设计与实现[J].东南大学学报:自然科学版, 2006, 36(2):226-227.
  [2] Juval L?wy. WCF服务编程[M].徐雷,徐扬,译.武汉:华中科技大学出版社.2011.
  [3] 陈亮.基于面向资源架构的REST方式Web服务的开发方法[J].信息科技,2008(22):110-111.
  [4] Roy Thomas Fielding.Architectural Styles and the Design of Network based Software Architectures[D].UNIVERSITY OF CALIFORNIA,2000:88.
  [5] 袁赞.Java与RESTful Web Services[J].电脑知识与技术:学术交流,2007(21).
  [6] 高静,段会川.JSON数据传输效率研究[J].计算机工程与设计,2011, 32(7):2267-2270.
  [7] JSON[EB/OL]. http://www.json.org.

跨平台文件传输 跨平台文件传输 REST风格服务在跨平台数据传输中的研究与应用

百度搜索“爱华网”,专业资料、生活学习,尽在爱华网!  

爱华网本文地址 » http://www.aihuau.com/a/390351/389631442183.html

更多阅读

如何简易完成局域网内文件传输 局域网大文件传输工具

如何简易完成局域网内文件传输——简介 如果您现在需要从一个电脑拷贝某些文件到另一个电脑,一般情况下,大家都是找个u盘或移动硬盘来转存,但是这样会比较浪费时间。如果这两台电脑在一个局域网内(不需要上网),那么你就可以采用下面我提供

ipad与电脑之间文件传输最新版 ipad怎么电脑传输文件

ipad与电脑之间文件传输最新版——简介本文以fileapp为示范进行操作,操作之前在ipad上下载fileappipad与电脑之间文件传输最新版——工具/原料PC机和ipadfileapp软件ipad与电脑之间文件传输最新版——方法/步骤ipad与电脑之间文件

苹果通过蓝牙传输文件的方法 如何用蓝牙传输文件

每一个苹果设备包括(iphone4s,ipad,itouch)都内置了蓝牙功能.但是这个蓝牙默认只能用来连接耳机等一些外设.也就是说如果不通过第三方软件苹果是不能与其它的蓝牙设备进行文件传输的。要实现苹果通过蓝牙传输文件需要用到iBlueToot

声明:《跨平台文件传输 跨平台文件传输 REST风格服务在跨平台数据传输中的研究与应用》为网友木槿七七分享!如侵犯到您的合法权益请联系我们删除