基于WCF的REST风格服务与Android跨平台数据通信
2016-11-19韩丰羽
韩丰羽
【摘 要】为实现Android和.NET平台的跨平台的数据传输方式,本文运用了REST风格的WCF服务框架,并将WCF托管在IIS上,同时在Android客户端上使用HttpClient,通过唯一标识符调用相对应的服务方法。经过多次实验表明,运用这种方式进行数据通信,可以减轻服务器的负担,降低与服务端通信的难度,且使程序更加可维护。
【关键词】WCF RESTful Android 数据交互
1 WCF平台概述
Windows Communication Foundation(WCF)是使用托管代码建立和运行面向服务的应用程序框架,主要是用来做松耦合的分布式通讯,它提供的包括托管、安全、异步等丰富功能使得开发者能够建立一个跨平台、可信赖、服务实例实力管理、事务管理的解决方案,且融合了.Net 平台下多种和分布式系统有关的技术:
(1)WSE(2)Net Remoting(3)ASMX(4)MSMQ。
1.1 WCF要素
地址:服务托管地址,每个服务都具有唯一地址,用来指定服务所在位置和传输协议,以供其它服务和客户端通过地址来对服务进行访问。每一个服务的地址由一个统一资源标示符(URI)来表示。
契约:用来描述服务功能,属于服务公开接口的一部分。契约分为:
(1)服务契约:定义了客户端调用时所执行的服务执操作;
(2)数据契约:定义了数据类型;
(3)消息契约:直接对soap头和soap体进行交互和控制。
绑定:它封装了传输协议、消息编码、安全传递、通信模式等一组绑定元素组成的通信基础结构。绑定可以加速开发过程,且充分利用内置的各种特性。
宿主:WCF服务需要承载在一个宿主上。WCF提供了多种宿主形式,包括自寄宿、IIS寄宿、Windows服务、Com+组件等。本文采用的是IIS寄宿。
1.2 REST风格
REST(Representational State Transfer)是一种轻量级的Web Service架构风格,对比SOAP和WSDL等复杂接口,其实现和操作明显更为简洁,且降低了开发的复杂性。
REST架构风格遵循了CRUD原则,即只需要四种行为:Create(创建)、Read(读取)、Update(更新)和Delete(删除)就可以完成对资源的操作和处理,它并不关心消息的定义与方法的设计。本文中选定HTTP/HTTPS协议作为REST这种框架风格的统一的网络通信协议,REST充分的利用了HTTP协议提供的四中方法,其中:
(1)创建资源在服务器上,使用POST方法;
(2)查找某个资源,使用GET方法;
(3)更改资源状态或对其更新,使用PUT方法;
(4)删除某个资源,使用DELETE方法。
REST支持HTML、XML、JSON等多种格式,本文采取的是JSON格式。
2 WCF服务端开发
服务端通过提供服务的访问点,使客户端可以调用其服务。本文中REST风格的WCF服务端与客户端之间的耦合度更低,服务端仅在收到客户端请求使才有响应,平时完全不关心客户端状态,减轻了服务端的负担,使其只保留资源状态信息和提供给客户端的接口功能。
2.1 创建WCF服务应用程序
在新建了一个WCF服务应用程序后,添加自定义的WCF服务文件WcfTest.svc,此时vs2012会自动生成接口文件IWcfTest.cs。接口文件如下:
要在WCF中创建REST风格的应用程序就必须用到System.ServiceModel.Web.dll组件。服务方法中[WebInvoke]特性是REST的重要元素,其属性用于修改或删除数据的操作,例如上述程序中UriTemplate属性使URI定义了一个自定义资源,客户端通过UriTemplate定义的资源名来访问该服务;对于ResponseFormat,RequestFormat属性是用于定义对服务操作发出的请求和响应格式,本文采用的是JSON格式。服务文件中就定义着接口的具体实现,再次不在累述。
需注意的一点是,本文是搭建一个REST风格的WCF服务应用程序,所以需要设置绑定为webHttpBinding,它是REST风格绑定,具体设置步骤:
(1)在解决方案框内找到Web.config;
(2)右击后找到WCF配置选项,选择新建服务;
(3)在bin文件夹里找到对应的动态链接库,选择并找到对应服务类型;
(4)设置服务终结点,找到Binding项,改为webHttpBinding。
2.2 IIS宿主
仅开发了自己的服务并不可以让外部客户端调用,还需要一个宿主进程来承载这些服务,WCF的托管服务包括:自托管和IIS托管。本文使用IIS托管,其优点是可实现程序隔离,管理程序的生命周期。虽限制只能使用HTTP/HTTPS协议,但本文采取webHttpBinding绑定,限制协议类型也就不是缺点了。
首先在服务器上添加一个网站。由于.NET framework4.0才支持REST风格,所以要将新添加网站的.NET framework版本改为v4.0。
接下来再次“重新生成解决方案”,右击工程选择“发布”选项,弹出web发布对话框。填写信息后点击“验证连接”,当出现绿色对号时说明连接成功。这时点击发布,整个WCF就发布到服务器的IIS上了。具体内容如下图2-1。
由于IIS服务器默认是不支持PUT和DELETE操作,返回“403-Forbidden”错误,因此需要修改IIS新建网站的属性设置为全部动作。最后检验是否发布成功,在IIS管理器中找到新建好的网站,点击浏览网站,当出现下图2-2时,证明发布成功了。
3 Android客户端开发
在REST风格下,Android客户端只要通过资源的URI就可以轻松的访问服务,实现与服务的交互。相比于传统JDK自带的HttpURLConnection,本文运用的HttpClient更简单易用,灵活方便。
3.1 HttpClient介绍
HttpClient封装了访问http的请求头,参数,内容体,响应等等。具体步骤:
(1)首先创建HttpClient对象。本文采用创建POST请求方法HttpPost实例,并指定请求URL;
(2)接下来对HttpPost对象调用setHeader()方法设置HTTP协议的消息头和交互信息的类型,同时规定setEntity()方法来设置请求参数;
(3)调用HttpClient对象的execute()发送请求,该方法返回一个HttpResponse;
(4)调用返回的HttpResponse的getEntity()方法可获取HttpEntity对象,该对象包装了服务器的响应内容。
3.2创建Android应用程序
在了解HttpClient的操作方法后,我们知道它是和HTTP/HTTPS协议进行交互,那么一定要设定Android的网络访问权限:
其次由于客户端与服务端的数据交互是一个很费时的过程,为避免出现界面卡顿导致降低用户体验的问题,Android2.3开始要求网络通信操作时要放在一个单独的线程中,因此我们要把调用服务的过程放在子线程里面,具体过程如下:
4结语
本文详述了REST风格的WCF与Android客户端进行信息交互的方式,通过以上方法可以实现跨平台通信。REST风格使客户端在访问服务方法时不用关心服务端业务方法的复杂性。并且因为WCF的成熟性,使实现跨平台通信的方法跟简单易用,安全性高,健壮性强。
参考文献:
[1]袁赞.Java与RESTful Web Service[J].电脑知识与技术 学术交流,2007.
[2]赵海宁,李洋.基于WCF框架的应用与研究[J].电脑知识与技术,2010 .
[3]朱夏,王茜.异构系统间数据交互模型的设计与实现[J].东南大学学报 自然科学版,2006 36(2):226-227.
[4]Pablo Cibraro,Kurt Claeys,Fabio Cozzolino,Johann Grabner Professional WCF 4[M] Wiley 2010.05.28.