• [原]Silverlight3 支持所有HTTP方法


    前两天兴冲冲的在学习RESTful Web Services,并试着做出来一个较“纯”的Service:

        [ServiceContract]
        [ServiceKnownType(
    typeof(Atom10FeedFormatter))]
        
    public interface ICleverCalendarSvc
        {
            [OperationContract]
            [WebGet(UriTemplate 
    = "Calendars", BodyStyle = WebMessageBodyStyle.Bare)]
            Atom10FeedFormatter Query();

            [OperationContract]
            [WebInvoke(UriTemplate 
    = "Calendars" , Method = "POST", RequestFormat = WebMessageFormat.Xml)]
            Atom10FeedFormatter Create(Atom10ItemFormatter
    <SyndicationItem> formatter);

            [OperationContract]
            [WebInvoke(UriTemplate 
    = "Calendars", Method = "PUT", RequestFormat = WebMessageFormat.Xml)]
            Atom10FeedFormatter Update(Atom10ItemFormatter
    <SyndicationItem> formatter);

            [OperationContract]
            [WebInvoke(UriTemplate 
    = "Calendars", Method = "DELETE", RequestFormat = WebMessageFormat.Xml)]
            Atom10FeedFormatter Delete(Atom10ItemFormatter
    <SyndicationItem> formatter);
        }

     试用我新做的Silverlight RESTful客户端调用一下,结果令人沮丧的very:

    百度上查一下,得知Silverlight不支持HTTP方法中的PUT和DELETE。买糕的!RESTful是我喜欢的,Silverlight也是我喜欢的,这可真要命,难道要放弃Silverlight?昨晚突然有一个想法,Silverlight的WebRequest不支持全部的HTTP方法,那可不可以自已做一个支持GET,POST,PUT,DELETE的WebRequest呢,有了这种念头,一大早来就开始上网看看有没有现成可用的Silverlight下的WebRequest,结果发现Silverlight并不是不支持PUT和DELETE方法(血的教训再一次告诉我们,不可偏听偏信,尽信Baidu不如少用Baidu),通过一些方法,Silverlight的WebRequest还是可以支持PUT,和DELETE的。具体做法简单的very:

    将获取WebRequest实例的这一句

    this.webRequest = WebRequest.Create(this.targetUri);

    修改为:

    this.webRequest = WebRequestCreator.ClientHttp.Create(this.targetUri);

    即可。

    MSDN曰:

    借助于 Silverlight,您可以指定是由浏览器还是客户端为基于 Silverlight 的应用程序提供 HTTP 处理。默认情况下,HTTP 处理是由浏览器执行的,您必须进行选择才能使用客户端 HTTP 处理。 

    下面是您通常将为其指定客户端 HTTP 处理的方案的列表。

    • 使用 HTTP 方法,而不是 GET 和 POST。

    • 在应用程序中或出于调试目的使用响应状态代码标题和响应正文。

    • 发送 XML HTTP 请求,如 REST 和 SOAP 消息。

    • 手动管理 cookie。

    到这儿似乎已经圆满结束了,但是MSDN又曰:

    GET 和 POST 以外的方法

    仅限客户端

    仅对客户端 HTTP 处理允许。

    必须根据客户端访问策略文件来允许。

    “必须根据客户端访问策略文件来允许”这一句话似乎要让clientaccesspolicy.xml也要参与此事,但是事实是在VS2008开发环境中,不修改clientaccesspolicy.xml任何内容客户端也能正常访问服务,莫非这句话是指部署在IIS后的情景?不管怎么说,写了个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>
        
    <policy>
          
    <allow-from http-methods="*">
            
    <domain uri="*"/>
          
    </allow-from>
          
    <grant-to>
            
    <resource path="/" include-subpaths="true"/>
          
    </grant-to>
        
    </policy>
      
    </cross-domain-access>
    </access-policy>
  • 相关阅读:
    内存溢出和内存泄漏的区别
    java 23种设计模式 深入理解
    关于安装office注册表权限的解决方法
    Tomcat在Linux上的安装与配置
    初窥Linux 之 我最常用的20条命令
    redis使用初体验
    学习进度条——第12周
    找水王
    学习进度条——第11周
    学习进度条——第10周
  • 原文地址:https://www.cnblogs.com/think8848/p/1616981.html
Copyright © 2020-2023  润新知