[玩转Silverlight]第四回:基础篇,在Silverlight中使用基于WCF的REST服务(下)
[玩转Silverlight]第四回:基础篇,在Silverlight中使用基于WCF的REST服务(下)
发布日期:2009.02.20 作者:Anytao
© 2009 Anytao.com ,Anytao原创作品,转贴请注明作者和出处。
书接上文:第三回:基础篇,在Silverlight中使用基于WCF的REST服务(上)
REST(Representational State Transfer,具象状态传输)是个好东西,具有诸多的优点值得拿来分享,在WEB更加开放的今天,尽管我们不能否认SOAP在客户端-服务器交互中的大放异彩,但同样也不能抹杀其他技术带来的独特风景和魅力,REST就是其中之一。同时,作为.NET 3.5中WCF框架的重量级飞跃,基于WCF的RESTful服务也让习惯了.NET平台的追随者看到曙光,那么本文的目的正是在上述技术的基础上通过Silverlight视角来消费崭新的REST服务,带领大家体验一下RESTful在Silverlight中的应用。
Host WCF REST
WCF编程模型的最多优点就是提供灵活的扩展机制,寄宿WCF REST服务同样非常的简单,我们通过两种方式Selft-Host和IIS Host来演示实现的过程,其中每种方式以配置形式简化终结点的创建过程。
Selft Host
首先是配置文件的设置:
<configuration> <system.serviceModel> <services> <service name="Anytao.SLScenario.Service.PostService"> <endpoint address="http://localhost:6666/PostService" binding="webHttpBinding" contract="Anytao.SLScenario.Service.IPostService" behaviorConfiguration="postbehavior"/> </service> </services> <bindings> <webHttpBinding> <binding name="secure"> <security mode="Transport"> <transport clientCredentialType="Basic"/> </security> </binding> </webHttpBinding> </bindings> <behaviors> <endpointBehaviors> <behavior name="postbehavior"> <webHttp/> </behavior> </endpointBehaviors> </behaviors> </system.serviceModel> </configuration>
然后以WebServiceHost注册相应的Endpoint,实现上很简单:
// Release : 2009/02/20
// Author : Anytao, http://www.anytao.com
static void Main(string[] args) { string baseUri = "http://localhost:6666/PostService"; WebServiceHost sh = new WebServiceHost(typeof(PostService), new Uri(baseUri)); sh.Opened += (s1,s2) => { Console.WriteLine("Service begin to listen via {0}", baseUri); }; sh.Open(); Console.ReadLine(); }
F5运行,基于REST的WCF服务就被发布,通过URL即可访问相应的服务例如:
如果想了解某个人发表的文章情况,只需在URL中输入人名,那么得到的结果将是:
哈哈,我们的REST服务经受了考验,等待Silverlight应用的光顾和消费了。
IIS Host
将Service Host到IIS是最常见的选择,其好处我们就不必都说,Artech兄在其blog中给了我们很多讨论的素材,我们要做的事情包括以下几个方面:
- 创建PostService.svc文件
<%@ ServiceHost Factory="System.ServiceModel.Activation.WebServiceHostFactory" Language="C#" Debug="true" Service="Anytao.SLScenario.Service.PostService" %>
- 配置web.config
<system.serviceModel> <services> <service name="Anytao.SLScenario.Service.PostService"> <endpoint address="" binding="webHttpBinding" contract="Anytao.SLScenario.Service.IPostService" behaviorConfiguration="postbehavior"/> </service> </services> <bindings> <webHttpBinding> <binding name="secure"> <security mode="None"> </security> </binding> </webHttpBinding> </bindings> <behaviors> <endpointBehaviors> <behavior name="postbehavior"> <webHttp/> </behavior> </endpointBehaviors> </behaviors> </system.serviceModel>
- 添加跨域策略文件clientaccesspolicy.xml
<?xml version="1.0" encoding="utf-8"?> <access-policy> <cross-domain-access> <policy> <allow-from http-request-headers="*"> <domain uri="*"/> </allow-from> <grant-to> <resource path="/" include-subpaths="true"/> </grant-to> </policy> </cross-domain-access> </access-policy>
- 在IIS创建应用,Host到服务目录并发布。
以IIS Host方式加载REST服务,就是这么简单,其中跨域策略文件是基于Silverlight应用的数据通信所必须提供的安全机制,在此不做过多讨论。
在Silverlight中消费REST
创建Silverlight应用的过程就不做过多陈述,我们首先通过项目结构来了解系统大致的模块划分和模块关系:
- Anytao.SLScenario.IISHost,Host REST服务到IIS。
- Anytao.SLScenario.REST, Silverlight应用,消费REST服务。
- Anytao.SLScenario.REST.Web,ASP .NET应用,托管Silverlight包,提供对外平台。
- Anytao.SLScenario.SelfHost,Self Host REST服务。
- Anytao.SLScenario.Service,提供REST 服务的定义及实现。
而在Silverlight中消费REST服务,我们以WebClient方式来实现,具体如何应用WebClient实现数据通信,可以参考《第一回:基础篇,品尝与HttpHandler通信》,调用的过程大同小异,例如以获取所有用户信息为例:
// Release : 2009/02/12
// Author : Anytao, http://www.anytao.com
private void btnGetAllUser_Click(object sender, RoutedEventArgs e) { string url = "http://localhost:1234/RESTService/PostService.svc/"; WebClient wc = new WebClient(); wc.DownloadStringCompleted += (obj, ex) => { if (null == ex.Error) { BindData(ex.Result); } }; wc.DownloadStringAsync(new Uri(url, UriKind.Absolute)); }
其他服务的消费均可以通过这种方式来完成,在Silverlight中我们可以对返回的数据进行操作,或者将其绑定到Silverlight数据控件,这都是我们随心所欲的事情啦。
小结
本文以REST为主线,将WCF REST相关的概念进行了一一梳理,并在理论的基础上创建实例化应用,以实际的服务提供、客户消费方式对Silverlight中实现REST通信进行了探讨,希望本文能提供一个较为全面的铺垫,为我们畅快淋漓的感受Silverlight做好基础上的准备。例如,在此基础上我们可以很容易的对Flickr REST服务进行访问,以Silverlight方式加载自己的图片管理。
参考文献
- An Introduction To RESTful Services With WCF
- Architectural Styles and the Design of Network-based Software Architectures
温故知新
2009/02/20 | http://anytao.cnblogs.com/
原文地址:http://www.cnblogs.com/anytao/archive/2009/02/20/anytao_silverlight_04_rest_part2.html
本文以“现状”提供且没有任何担保,同时也没有授予任何权利。 | This posting is provided "AS IS" with no warranties, and confers no rights.
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
Worktile,新一代简单好用、体验极致的团队协同、项目管理工具,让你和你的团队随时随地一起工作。完全免费,现在就去了解一下吧。
https://worktile.com