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.
ClientAccessPolicy
.xml最好是儲存成utf-8格式的,檔案內容如下:
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).asp教程x