您的位置:首页 > 其它

SilverLight跨域访问及其常用的几种解决方法

2008-11-13 13:55 537 查看
今天在做silverlight访问JSon数据的时候老是出现错误,才发现是跨域的问题,因此将这方面的内容整理一些,列了出来

SilverLight 出于对安全性的考虑默认情况下对URL的访问进行了严格的限制,只允许访问同一子域下的URL资源。

下表列出了Silverlight 2.0 中 URL 访问规则:

WebClient对象Media、images、ASXXAML 文件、Font 文件流媒体
允许的协议HTTP, HTTPSHTTP, HTTPS, FILEHTTP, HTTPS, FILEHTTP
跨协议访问不允许不允许不允许不允许来自HTTPS的访问
跨Web域访问不允许如果不是来自HTTPS则允许不允许允许
跨安全区域访问(Windows)不允许不允许不允许不允许
跨安全区域访问(Macintosh)不允许允许不允许允许
允许重定向同域允许允许同域允许不允许
如果WCF与SilverLight Web不是在同一站点,那么我们就要在被访问端的根域放上两个XML文件clientaccesspolicy.xml,crossdomain.xml

如果要通过WebClinet访问另一站点的资源,那么需要在被访问站点放上域访问策略xml文件,不然在Complete事件里面的事件参数报告空对象引用。

clientaccesspolicy.xml文件格式如何,切忌最好要将编码设置为utf-8,否则极易出错

<?xml version="1.0" encoding="utf-8"?>

<access-policy>

<cross-domain-access>

<policy>

<allow-from>

<domain uri="*"/>

</allow-from>

<grant-to>

<resource path="/" include-subpaths="true"/>

</grant-to>

</policy>

</cross-domain-access>

</access-policy>

crossdomain.xml文件格式

crossdomain.xml的格式非常简单,其根节点为<cross-domain-policy> ,其下包含一个或多个<allow-access-from>节点,<allow-access-from>有一个属性domain,其值为允许访问的域,可以是确切的 IP 地址、一个确切的域或一个通配符域(任何域)。下边是两个例子:

程序代码

<?xml version="1.0"?>

<cross-domain-policy>

<allow-access-from domain="http://www.lishewen.com.cn/" />

<allow-access-from domain="*.lishewen.com.cn" />

<allow-access-from domain="222.217.221.16" />

</cross-domain-policy>

程序代码

<?xml version="1.0"?>

<cross-domain-policy>

<allow-access-from domain="*" />

</cross-domain-policy>

第二个例子允许任何域的访问。对于crossdomain.xml文件存放位置,建议将其存放于站点根目录中!

如:http://bbs.lishewen.com.cn/crossdomain.xml

在这我也弄了个Silverlight的例子来测试

http://silverlight.lishewen.net.cn/SyndicationFeedReader/

关于clientaccesspolicy.xml,crossdomain.xml的具体说明,请大家参看MSDN http://msdn.microsoft.com/en-us/library/cc645032(VS.95).aspx

文章整理资料来源于:http://www.cnblogs.com/format/articles/1282203.html
http://blog.lishewen.com.cn/post/2008/06/e4bdbfe794a8crossdomainxmle8aea9Silverlighte58fafe4bba5e8b7a8e59f9fe4bca0e8be93e695b0e68dae.aspx
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: