zoukankan      html  css  js  c++  java
  • [原]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>
  • 相关阅读:
    PostgreSql开启远程连接
    Cannot resolve scoped service from root provider
    运行项目报错MSB 401 "RazorTagHelper" 任务意外失败
    win10远程共享文件夹
    Typora 快捷方式给字体设置颜色
    markdown编辑器typora支持图床的功能
    【HTML】二、HTML标签
    【HTML】一、初识HTML
    sublime text3安装后html:5+Tab不能快速生成html头部信息的解决办法
    markdown语法
  • 原文地址:https://www.cnblogs.com/think8848/p/1616981.html
Copyright © 2011-2022 走看看