Silverlight跨域问题的解决方法

【原文来自于http://hi.baidu.com/heiru/blog/item/7c61b01c54b9f18186d6b61d.html,写在这里以做备份,在原文的基础上做了适当编辑。】

Silverlight 出于对安全性的考虑默认情况下对URL的访问进行了严格的限制,只允许访问同一子域下的URL资源。
下表列出了Silverlight 2.0 中 URL 访问规则:

  WebClient对象 Media、images、ASX XAML 文件、Font 文件 流媒体
允许的协议 HTTP, HTTPS HTTP, HTTPS, FILE HTTP, HTTPS, FILE HTTP
跨协议访问 不允许 不允许 不允许 不允许来自HTTPS的访问
跨Web域访问 不允许 如果不是来自HTTPS则允许 不允许 允许
跨安全区域访问(Windows) 不允许 不允许 不允许 不允许
跨安全区域访问(Macintosh) 不允许 允许 不允许 允许
允许重定向 同域允许 允许 同域允许 不允许


如果WCF与Silverlight Web不是在同一站点,那么我们就要在被访问端的根域放上两个XML文件ClientAccessPolicy.xml,CrossDomain.xml.

这两个文件的格式需要是utf-8的,并且需要放在根目录,即如果你的IIS版本是6并且你是新建的虚拟目录,这时你需要将这两个文件放到C:\inetpub\wwwroot中,而不是放到虚拟目录的根目录。


ClientAccessPolicy.xml文件内容如下:

ClientAccessPolicy.xml的内容
<?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的格式非常简单,其根节点为<cross-domain-policy> ,其下包含一个或多个<allow-access-from>节点,<allow-access-from>有一个属性 domain,其值为允许访问的域,可以是确切的 IP 地址、一个确切的域或一个通配符域(任何域)。

CrossDomain.xml Demo
<?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>

关于这两个文件的更多内容可以看MSDN http://msdn.microsoft.com/en-us/library/cc645032(VS.95).aspx

原文地址:https://www.cnblogs.com/zhangronghua/p/SilverLightCorssDomainIssue.html