RinggoYao 发表于 2013-1-2 23:15:47

Silverlight使用RESTful Service

<div id="cnblogs_post_body">            本篇主要文章涉及到几个技术点:
                                       1.RESTful Service
                                       2.Caliburn.Micro
                                       3.Reactive Extension                        
                                       4.MEF
                                       5.Json.net
             限于篇幅,本文不会对每个框架的来龙去脉讲的很清楚,也无法对每一个技术点详细介绍,文章末尾有源码供参考。
             Silverlight与WCF可以通过多种协议方式进行交互,比如basichttp,net.tcp,在某些情形下,我们可能对数据的要求不需像SOAP格式,所以采用RESTFul Service的考量在于数据传输非常的干净.
            下面2步解释如何创建一个RESTFul Service:
            建立一个Silverlight-enabled WCF Servcie文件,这里命名为BookService,这里只写了一个Get接口
          http://images.cnblogs.com/cnblogs_com/626498301/201207/201207031546187134.png      
          给终结点添加webhttp的行为,需要手动修改Web.config的配置
         http://images.cnblogs.com/cnblogs_com/626498301/201207/201207031546208048.png

         在浏览器测试好是否配置正确:
                                          http://images.cnblogs.com/cnblogs_com/626498301/201207/201207031546212933.png      注意,因为Google Chrome对Josn的数据进行了处理,所以可以直接呈现Json格式的数据
          http://images.cnblogs.com/cnblogs_com/626498301/201207/201207031546229279.png
         之所以数据序列化采用的Json.net ,参考官网对其一个性能比较:      
                     http://images.cnblogs.com/cnblogs_com/626498301/201207/201207031546243159.png

         那么对前文已经处理好服务端了,客户端引用后:由于个人习惯MVVM的模式,所以用了Caliburn.Mrico
         http://images.cnblogs.com/cnblogs_com/626498301/201207/201207031546279274.png
         通过Nuget安装该组件后,会自动引入框架文件,无须费心,只需要在App.xaml中加入Caliburn.Mirco的AppBootstrapper,Caliburn.Mirco默认使用MEF作为容器.
       http://images.cnblogs.com/cnblogs_com/626498301/201207/201207031546278684.png       删除App.xaml.cs中不相关的代码后,就完成了对Caliburn.Mirco配置
      在Viewmodel中实现对服务端的数据获取:
      http://images.cnblogs.com/cnblogs_com/626498301/201207/20120703154628778.png
    这里使用Reactive的方式进行异步编程的,传统的方式应该是这样
http://images.cnblogs.com/cnblogs_com/626498301/201207/201207031546295695.png 看看View的XAML是如何组织的:
http://images.cnblogs.com/cnblogs_com/626498301/201207/201207031546303121.png
    Caliburn.Mrico提供了一种命名机制,比如Button的Name为Read,它会在相对应的ViewModel中寻找Read().

    其实本文还有一个目的,最近随着WinRT的推出,似乎各方对Silverlight的前景都不看好,其实若深入了解本文所涉及的Xaml,Caliburn.Mrico,WCF,Json,Rx,Mef,这些都是我是在
做Silverlight的过程中接触这些的,这些在.NET平台上都是可通用的技术或者框架,甚至转至WinRT的成本更低,万变不离其宗,抱怨的越多,说明越没有底气,从个人平日对国内外技术社区的
了解来看,在国内许多人还在喋喋不休的抱怨技术更新太快时,国外的同行已经在思考如何怎样做一个好产品,好应用,这就是所谓的差距。


    代码下载:REST
页: [1]
查看完整版本: Silverlight使用RESTful Service