微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Silverlight使用HttpWebRequest和HttpWebResponse时发生System.Security.SecurityException: 安全性错误

最近项目需要,研究Silverlight 从阿里云下载数据,遇到一些问题:

1   slilverlight 调用webservice

2   sliverlight 下载数据提示安全性错误

对于这两个问题解决方法如下:

1      由于Silverlight的特性,调用webservice时,只能通过异步的方式访问,在实际项目中,很多同步访问,这就需要用到域服务类来实现(DomainService),关于具体DomainService具体介绍请访问http://www.cnblogs.com/lincats/archive/2011/07/05/2098155.html,该博客详细讲解了原理,这里就不多介绍。主要讲解如何使用:

1.1)  在SilverlightApplication1.Web项目中,添加DomainService类

 

1.2 )  在SilverlightApplication1中添加对DomainService1的链接,点击SilverlightApplication1项目属性认silverlight选项卡,在WCF Ria 链接服务中选择SilverlightApplication1.Web

如图

 

 

 

1.3 )   在silverlight使用wcf ria服务链接

 SilverlightApplication1.Web.DomainService1 domain = new Web.DomainService1();
                domain.GetDownloadUrl(182,75905,new Action<System.ServiceModel.domainservices.Client.InvokeOperation<List<URLRes>>>(test),null);      

2  安全性解决方案:主要是silverlight安全限制造成的。通过配置访问文件可以解决博客Silerlight调用WCF、Web Service、Wcf Ria Service跨域的问题有很好的解决方

这里介绍需要注意的地方

Silverlight很容提示跨域错误,如图

实现跨域需要在你的*.Web服务端的根目录下放上两个文件clientaccesspolicy.xml 和crossdomain.xml

.web服务端的根目录很重要,本人在相中正确配置了访问文件,却因为放错位置而一直通不过安全检测。

在SilverlightApplication1.Web中选择clientaccesspolicy.xml 和crossdomain.xml文件,右击属性->输出到目录->选择始终复制

只需要在你的*.Web服务端的根目录下放上两个文件clientaccesspolicy.xml 和crossdomain.xml

(1)clientaccesspolicy.xml 以配置服务允许跨域访问

<?xml version="1.0" encoding="utf-8"?>
<access-policy>
  <cross-domain-access>
    <policy>
      <allow-from http-request-headers="*">
        <domain uri="*"/>
      </allow-from>
      <!--只允许从其他域中的一个访问,如http://contoso.com      
       <allow-from http-request-headers="*">
        <domain uri="http://contoso.com"/>
      </allow-from>      
      -->
      <!--允许访问 HTTPS 服务      
       <allow-from http-request-headers="*">
        <domain  uri=”http://*”/>
      </allow-from>      
      -->    
      <grant-to>
        <resource path="/" include-subpaths="true"/>
      </grant-to>
    </policy>
  </cross-domain-access>
</access-policy>


(2) crossdomain.xml 该文件必须将整个域标记为 public

<?xml version="1.0" ?>
<cross-domain-policy>
  <allow-access-from domain="*" />
</cross-domain-policy>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐