[原]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 >

 

 

转载于:https://www.cnblogs.com/think8848/archive/2009/12/04/1616981.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值