zoukankan      html  css  js  c++  java
  • [玩转Silverlight]第四回:基础篇,在Silverlight中使用基于WCF的REST服务(下)

    《你必须知道的.NET》网站 | Anytao技术博客 

    [玩转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方式加载自己的图片管理。

    参考文献

    温故知新


    anytao | © 2009 Anytao.com

    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.

    本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    NET Core中实现一个Token base的身份认证
    自定义一个服务器感受一下管道是如何监听、接收和响应请求的
    把商品卖给用户
    Mac版Visual Studio预览版
    Docker实战
    大数据的四大特点
    ElasticSearch Nosql
    Oracle和Elasticsearch数据同步
    关于MySql链接url参数的设置 专题
    linux date
  • 原文地址:https://www.cnblogs.com/anytao/p/anytao_silverlight_04_rest_part2.html
Copyright © 2011-2022 走看看